Ho il seguente codice C# (da una libreria che sto usando) che cerca di trovare un certificato che paragona l'identificazione personale. Si noti che nel codice seguente sia mycert.Thumbprint
sia certificateThumbprint
sono stringhe.Perché String.Equals restituisce false?
var certificateThumbprint = AppSettings.CertificateThumbprint;
var cert =
myStore.Certificates.OfType<X509Certificate2>().FirstOrDefault(
mycert =>
mycert.Thumbprint != null && mycert.Thumbprint.Equals(certificateThumbprint)
);
questo non riesce a trovare il certificato con l'identificazione personale, perché è mycert.Thumbprint.Equals(certificateThumbprint)
false
anche quando le stringhe sono uguali. mycert.Thumbprint == certificateThumbprint
restituisce anche false
, mentre mycert.Thumbprint.CompareTo(certificateThumbprint)
ritorna 0.
potrei mancare qualcosa di ovvio, ma io non riesco a capire il motivo per cui il metodo Equals
sta fallendo. Idee?
Questa potrebbe essere una domanda strana ... ma le lunghezze sono le stesse su ogni stringa?(cercando di vedere se ci sono caratteri non stampabili in qualche modo). – vcsjones
Dal file ['string.CompareTo'] (http://msdn.microsoft.com/en-us/library/fkw3h78a (v = vs.110) .aspx): * I set di caratteri ** includono caratteri ignorabili. * * Il metodo CompareTo non considera tali caratteri quando esegue un confronto sensibile alla cultura. Ad esempio, se il codice seguente viene eseguito su .NET Framework 4 o versioni successive, un confronto tra "animal" e "ani-mal" (utilizzando un trattino morbido o U + 00AD) indica che le due stringhe sono equivalenti. * –
@Yuval La tua citazione sembra implicare l'opposto di ciò che sospetti vcsjones. –