【发布时间】:2014-11-17 21:24:26
【问题描述】:
我有以下 C# 代码(来自我正在使用的库)尝试查找比较指纹的证书。请注意,在以下代码中,mycert.Thumbprint 和 certificateThumbprint 都是字符串。
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 方法会失败。想法?
【问题讨论】:
-
这可能是一个奇怪的问题......但是每个字符串的长度是否相同? (试图以某种方式查看是否有任何不可打印的字符)。
-
来自
string.CompareTo文档:字符集包括可忽略的字符。 CompareTo 方法在执行区分区域性的比较时不考虑此类字符。例如,如果以下代码在 .NET Framework 4 或更高版本上运行,“animal”与“animal”的比较(使用软连字符或 U+00AD)表明这两个字符串是等价的。 -
@JonathonReinhart 我的引用表明
CompareTo将可忽略的字符排除在比较之外。这就是CompareTo返回 0 的原因。我认为这就是 vcsjones 的作用。 -
请查看每个字符串的
.ToCharArray(),并逐个字符地比较它们。几乎可以肯定存在细微的性格差异。如果字符串正在报告:字符串可能不相等 -
@PeterRitchie 第一行代码为
var certificateThumbprint = AppSettings.CertificateThumbprint;,因此是我的问题。问题已解释there。而且你不喜欢即时运行问题吗,OP 已经有一个小时没有出现了。
标签: c# string comparison equality