Mam następujący kod C# (z biblioteki, której używam), który próbuje znaleźć certyfikat porównujący odcisk kciuka. Zauważ, że w poniższym kodzie są zarówno ciągi znaków, jak i mycert.Thumbprint
i certificateThumbprint
.Dlaczego String.Equals zwraca wartość false?
var certificateThumbprint = AppSettings.CertificateThumbprint;
var cert =
myStore.Certificates.OfType<X509Certificate2>().FirstOrDefault(
mycert =>
mycert.Thumbprint != null && mycert.Thumbprint.Equals(certificateThumbprint)
);
ten nie znajdzie się certyfikat z odciskiem palca bo mycert.Thumbprint.Equals(certificateThumbprint)
jest false
nawet gdy łańcuchy są równe. mycert.Thumbprint == certificateThumbprint
zwraca również false
, natomiast mycert.Thumbprint.CompareTo(certificateThumbprint)
zwraca 0.
I może być brakuje czegoś oczywiste, ale nie mogę zrozumieć, dlaczego metoda Equals
zawodzi. Pomysły?
To może być dziwne pytanie ... ale czy długości są takie same na każdym sznurku?(próbując sprawdzić, czy w jakiś sposób są tam jakieś niedrukowalne znaki). – vcsjones
Z plików ['string.CompareTo'] (http://msdn.microsoft.com/en-us/library/fkw3h78a (v = vs.110) .aspx) docs: * Zestawy znaków ** zawierają niedozwolone znaki. * * Metoda CompareTo nie uwzględnia takich znaków, gdy dokonuje porównania wrażliwego na kulturę. Na przykład, jeśli poniższy kod zostanie uruchomiony w .NET Framework 4 lub nowszym, porównanie "animal" z "ani-mal" (za pomocą miękkiego łącznika, lub U + 00AD) wskazuje, że dwa ciągi są równoważne. * –
@Yuval Twój cytat zdaje się sugerować przeciwieństwo tego, co podejrzewa vcsjones. –