簡體   English   中英

C#字符串相等運算符返回false,但我很確定它應該是真的......什么?

[英]C# string equality operator returns false, but I'm pretty sure it should be true… What?

我正在嘗試為生成大量文本的代碼編寫單元測試。 我遇到了一個問題,其中“預期”和“實際”字符串似乎相等,但Assert.AreEqual拋出,並且相等運算符和Equals()返回false。 GetHashCode()的結果對於兩個值也是不同的。

但是,將兩個字符串放入文本文件並與DiffMerge進行比較告訴我它們是相同的。

此外,在兩個值上使用Encoding.ASCII.GetBytes()然后使用SequenceEquals來比較結果字節數組返回true。

這些值每個都是34KB,所以我暫時把它們放在這里。 有任何想法嗎? 我完全難過了。

通過char循環char並找到它認為不同的? 將它寫入磁盤並比較ASCII /文本的事實告訴我,它可能是回車/換行相關(在保存期間以某種方式標准化),或者與某些非ASCII字符(可能是高 - 相關) unicode whitespace),在保存為ASCII時將被剝離。

您正在為DiffMerge提供的文件的編碼類型是什么? 如果您的字符與編碼類型不匹配,則有可能它們不會顯示在DiffMerge中。

正在生成的字符串和預期結果可能具有不同的字符編碼。 當您使用ASCII.GetBytes ,您將所有內容轉換為ASCII。 因此,您的字符串將轉換為ASCII,並且在ASCII字符集方面相同。 但是,它們在其他字符集中仍然可能不相等(並且仍然“看起來”與您相同)。

另外,嘗試執行string.Compare(str1, str2, StringComparison.XXXX)並告訴我們發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM