【发布时间】:2013-06-26 03:49:44
【问题描述】:
此问题适用于 C#、.net Compact Framework 2 和 Windows CE 5 设备。
我在 .net DLL 中遇到了一个错误,该错误多年来一直在非常不同的 CE 设备上使用,但没有显示任何问题。突然,在新的 Windows CE 5.0 设备上,这个 bug 出现在以下代码中:
string s = "Print revenue receipt"; // has only single space chars
int i = s.IndexOf(" "); // two space chars
我希望 i 为 -1,但直到今天才如此,当时 indexOf 突然返回 5。
由于使用时不会发生这种行为
int i = s.IndexOf(" ", StringComparison.Ordinal);
,我很确定这是一种基于文化的现象,但我无法识别这种新设备的不同之处。它是已知设备的大致相同版本(只是更快的 cpu 和新板)。
两个设备:
- 运行具有相同本地化的 Windows CE 5.0
- System.Environment.Version 报告“2.0.7045.0”
- CultureInfo.CurrentUICulture 和 CultureInfo.CurrentCulture 报告“en-GB”(也使用“de-DE”进行测试)
- “所有”相关的注册表项都是相等的。
新设备预装了 CF 3.5,我实验性地重命名了它的 GAC 文件,描述的行为没有改变。由于在运行时总是报告版本 2.0.7045.0,我假设这些程序集没有任何效果。
虽然这不难解决,但当事情看起来如此神奇时,我无法忍受。任何提示我错过了什么?
编辑:越来越陌生,看截图:
还有一个:
【问题讨论】:
-
你运行这个 exact 代码,你得到 5?
-
当然不完全是,请看我上面的截图。我也纠正了这个问题。有趣的点:* s = "打印收入"; // 结果 -1 * s = "Drucke Beleg aus"; // 结果 -1 (!) 请原谅我的频繁编辑,我是 SO 新手。
-
您是否尝试循环遍历
s字符串中的每个字符以查看它们是否是我们看不到显示的任何字符?例如,在这个问题stackoverflow.com/questions/4893216/… 中,它是一个软连字符,导致您遇到的问题相同 -
@ErgibtSinn 您是否尝试过清理和重建您的项目?