.net和IndexOf中的特殊符号

Pet*_*etr 20 c# string parsing

我发现了一个有趣的错误,甚至可能在.net中(还没有尝试过单声道).

IndexOf() string实例的方法是返回某些特殊符号的有符号值(-1或更低),

例如,我有一个字符串,其中包含一些特殊的unicode字符,这个字符串里面的某个地方是我正在寻找的冒号.Calling IndexOf(" :")对于肯定包含" :"返回的签名值的行

我会尝试在这里粘贴这个字符串,但是给定特殊符号可能很难:

hitchcock.freenode.net 322 petan #hobbiton 5 :????? > Good luck axa!

有办法解决这个问题吗?

DGi*_*bbs 10

这在BCL博客上有记录

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方法(String,Int32,StringComparison)重载:

例如:

IndexOf(":", StringComparison.Ordinal);
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,特别是因为它说每个人都应该默认使用带有StringComparison的版本.我不知道这一点,不这样做可能会导致像我那样的不可预测的错误.谢谢 (2认同)

Pet*_*etr 9

我看到有些人出于某种原因想要关闭这个问题,所以我会在这之前回答:-)

感谢@vcsjones的评论中的答案,它似乎与语言环境设置有关,可以通过更改来修复

text.IndexOf(" :")

text.IndexOf(" :", StringComparison.Ordinal)

这可能是一个糟糕的答案,但总比没有好......