我有以下C#代碼(來自我正在使用的庫)試圖找到比較指紋的證書。請注意,在以下代碼中,mycert.Thumbprint
和certificateThumbprint
都是字符串。爲什麼String.Equals返回false?
var certificateThumbprint = AppSettings.CertificateThumbprint;
var cert =
myStore.Certificates.OfType<X509Certificate2>().FirstOrDefault(
mycert =>
mycert.Thumbprint != null && mycert.Thumbprint.Equals(certificateThumbprint)
);
這未能找到與指紋的證書,因爲mycert.Thumbprint.Equals(certificateThumbprint)
是false
即使字符串相等。 mycert.Thumbprint == certificateThumbprint
也返回false
,而mycert.Thumbprint.CompareTo(certificateThumbprint)
返回0
我可能會丟失一些東西很明顯,但我不明白,爲什麼Equals
方法失敗。想法?
這可能是一個奇怪的問題......但是每個字符串的長度都是一樣的嗎?(試圖查看是否有任何不可打印的字符)。 – vcsjones 2014-09-23 15:30:45
從['string.CompareTo'](http://msdn.microsoft.com/en-us/library/fkw3h78a(v = vs.110).aspx)文檔:*字符集**包含可忽略的字符。* * CompareTo方法在執行文化敏感比較時不考慮這些字符。例如,如果以下代碼在.NET Framework 4或更高版本上運行,則將「動物」與「ani-mal」(使用軟連字符或U + 00AD)進行比較,表明這兩個字符串是等效的。 – 2014-09-23 15:33:40
@Yuval你的引用似乎暗示着vcsjones懷疑的是什麼。 – 2014-09-23 15:35:20