【发布时间】:2012-07-13 02:57:50
【问题描述】:
我们最近将所有项目从 .NET 3.5 升级到 .NET 4。关于string.IndexOf(),我遇到了一个相当奇怪的问题。
我的代码显然做了一些稍微不同的事情,但在调查问题的过程中,我发现在一个字符串上调用 IndexOf() 本身返回 1 而不是 0。
换句话说:
string text = "\xAD\x2D"; // problem happens with "-dely N.China", too;
int index = text.IndexOf(text); // see update note below.
给我的索引是 1,而不是 0。关于这个问题需要注意的几点:
问题似乎与这些连字符有关(第一个字符是 Unicode 软连字符,第二个是常规连字符)。
我已经仔细检查过,这在 .NET 3.5 中不会发生,但在 .NET 4 中会发生。
将
IndexOf()更改为进行序数比较可解决问题,因此由于某种原因,默认IndexOf会忽略第一个字符。
有人知道为什么会这样吗?
编辑
对不起,伙计们,在原始帖子上做了一些东西,并在那里两次获得了隐藏的破折号。我已经更新了字符串,只要将它粘贴到正确的编辑器中,它应该返回 1 而不是 2 的索引。
更新:
将原始问题字符串更改为每个实际字符都清晰可见的字符串(使用转义)。这稍微简化了问题。
【问题讨论】:
-
Mono 2.10.8.1(兼容.net 4)返回
0... -
您的本地默认区域/文化设置是什么?
-
@sll 程序是 en-GB 的,但由于我是在将字符串与自身进行比较,会有所不同吗?
标签: c# string .net-4.0 .net-3.5