У меня есть следующий код 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
Из ['string.CompareTo'] (http://msdn.microsoft.com/en-us/library/fkw3h78a (v = vs.110) .aspx) docs: * Наборы символов ** включают невосприимчивые символы. * * Метод CompareTo не учитывает такие символы, когда он выполняет культурно-чувствительное сравнение. Например, если следующий код выполняется на .NET Framework 4 или более поздней версии, сравнение «животное» с «ani-mal» (с использованием мягкого дефиса или U + 00AD) указывает на то, что две строки эквивалентны. * –
@Yuval Ваша цитата, похоже, подразумевает противоположность тому, что подозревает vcsjones. –