C#string.IndexOf()返回意外值

Erg*_*inn 17 c# string indexof

此问题适用于C#,. net Compact Framework 2和Windows CE 5设备.

我在.net DLL中遇到了一个错误,该错误在很多年的CE设备上使用多年,没有出现任何问题.突然,在新的Windows CE 5.0设备上,此错误出现在以下代码中:

string s = "Print revenue receipt"; // has only single space chars 
int i = s.IndexOf("  "); // two space chars
Run Code Online (Sandbox Code Playgroud)

我希望我成为-1,但是直到今天才这样,当indexOf突然返回5时.

由于使用时不会发生此行为

int i = s.IndexOf("  ", StringComparison.Ordinal);
Run Code Online (Sandbox Code Playgroud)

,我很确定这是一种基于文化的现象,但我无法认识到这种新设备的不同之处.它是已知设备的大致相同版本(只是更快的CPU和新板).

两种设备:

  • 运行具有相同本地化的Windows CE 5.0
  • System.Environment.Version报告'2.0.7045.0'
  • CultureInfo.CurrentUICulture and CultureInfo.CurrentCulture report'en-GB'(也用'de-DE'测试)
  • 'all'相关的注册表键是相同的.

新设备预安装了CF 3.5,其GAC文件我通过实验重命名,所描述的行为没有变化.由于在运行时始终报告版本2.0.7045.0,我假设这些程序集无效.

虽然这并不难解决,但是当事情看起来很神奇时我无法忍受.什么提示我缺少什么?

编辑:它变得陌生和陌生,看截图: 截图

多一个: 截图

Jan*_*aus 0

在某些系统上,文化的东西确实看起来很神奇。经过多年的痛苦之后,我总是将文化信息手动设置为InvariantCulture我不明确希望不同文化有不同行为的地方。所以我的建议是:使该IndexOf检查始终使用相同的文化信息,如下所示:

int i = s.IndexOf("  ", StringComparison.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)