Console.WriteLine(string.CompareOrdinal("aaaaa", 3, "bbbb", 1, 0));
Console.WriteLine(string.CompareOrdinal("aaaaa", 1, "bbbb", 3, 0));
Console.WriteLine(string.CompareOrdinal("aaaaa", 1, "bbbb", 2, 0));
当我编译并运行此代码时,有时会打印
0
0
0
(预期的) 有时候
-1
-1
0
(真正奇怪的是,因为2个空子串必须相等)
第二种输出发生在我的一个程序中,我不知道为什么。我正在使用VS2013为.NET 4.5.1 AnyCpu编译它。有没有人遇到类似的错误?任何想法,为什么会发生?
答案 0 :(得分:-1)
可以在关于String.CompareOrdinal方法的MSDN“备注”中找到一个可能的答案:
http://msdn.microsoft.com/en-us/library/es986b3k(v=vs.110).aspx
...因为CompareOrdinal(String,String)是一个静态方法,strA和strB 可以为null。如果两个值都为null,则该方法返回0(零),即 表示strA和strB相等。 如果只有一个值为null,则该方法将非null值视为 更大
你是否有可能传入一个空字符串?
答案 1 :(得分:-4)
关于位数,我并不完全正确。其中一个应用程序有一个" 32位首选"选项集,实际以32位模式运行。因此,这就是原因:32位应用程序打印全零,64位应用程序打印" -1 -1 0"。但是,这只是答案的一部分。我仍然需要解释为什么会这样。欢迎提供更好的答案。
UPD我已将此报告给Microsoft https://connect.microsoft.com/VisualStudio/feedback/details/871055/incorrect-behavior-of-an-application-in-64-bit-mode
UPD2 .NET 4.6.1 - 问题仍然存在; Microsoft已默默删除了我的Connect bugreport