C#字符串相等运算符返回false,但我很确定它应该是真的......什么?

时间:2010-04-01 03:49:33

标签: c# string equality

我正在尝试为生成大量文本的代码编写单元测试。我遇到了一个问题,其中“预期”和“实际”字符串似乎相等,但Assert.AreEqual抛出,并且相等运算符和Equals()都返回false。 GetHashCode()的结果对于这两个值也是不同的。

然而,将两个字符串放入文本文件并与DiffMerge比较告诉我它们是相同的。

此外,在两个值上使用Encoding.ASCII.GetBytes(),然后使用SequenceEquals比较结果字节数组,返回true。

每个值都是34KB,所以我暂时把它们放在这里。有任何想法吗?我完全难过了。

2 个答案:

答案 0 :(得分:10)

通过char循环char并查找它认为不同的内容?将它写入磁盘并比较ASCII /文本的事实告诉我,它可能是回车/换行相关(在保存期间以某种方式标准化),或者与某些非ASCII字符(可能是高 - 相关) unicode whitespace),在保存为ASCII时将被剥离。

答案 1 :(得分:5)

您要向DiffMerge提供的文件的编码类型是什么?如果您的字符与编码类型不匹配,则有可能它们不会显示在DiffMerge中。

正在生成的字符串和预期结果可能具有不同的字符编码。当您执行ASCII.GetBytes时,您将所有内容转换为ASCII。因此,您的字符串将转换为ASCII,并且在ASCII字符集方面相同。但是,它们在其他字符集中仍然可能不相等(并且仍然“看起来”与您相同)。

另外,尝试做一个string.Compare(str1, str2, StringComparison.XXXX),让我们知道会发生什么。