我发现了一个有趣的错误,甚至可能在.net中(还没有尝试过单声道)。
字符串实例的 IndexOf()
方法为某些特殊符号返回有符号值(-1或更低),
Calling IndexOf(" :")
对于肯定包含" :"
返回签名值的行
我会尝试在这里粘贴这个字符串,但是给定特殊符号可能很难:
hitchcock.freenode.net 322 petan #hobbiton 5 :ˁ˚ᴥ˚ˀ > Good luck axa!
有办法解决这个问题吗?
答案 0 :(得分:10)
IndexOf()
默认进行文化不变对比。
请特别注意:
.NET 4 Beta 1的更新为了保持.NET 4与之前版本之间的高兼容性,我们决定还原此更改。 String的默认部分匹配重载和String和Char的ToUpper和ToLower方法的行为现在与.NET 2.0 / 3.0 / 3.5中的行为相同。 .NET 4 Beta 1中存在对原始行为的更改。对于可能导致的任何临时混淆,我们深表歉意。 我们继续建议明确您想要的字符串比较行为,方法是始终为接受它的String上的方法指定StringComparison值。
您应该使用String.IndexOf Method (String, Int32, StringComparison)重载:
例如:
IndexOf(":", StringComparison.Ordinal);
答案 1 :(得分:9)
我看到有些人出于某种原因想要关闭这个问题,所以在这之前我会回答: - )
感谢@vcsjones的评论中的答案,它似乎与语言环境设置有关,可以通过更改来修复
text.IndexOf(" :")
到
text.IndexOf(" :", StringComparison.Ordinal)
这可能是一个糟糕的答案,但总比没有好......