मेरे पास निम्न 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
विधि विफल हो रहा है। विचार?
यह एक अजीब सवाल हो सकता है ... लेकिन क्या प्रत्येक स्ट्रिंग पर लम्बाई समान है?(यह देखने की कोशिश कर रहा है कि वहां किसी भी तरह के गैर-प्रिंट करने योग्य पात्र हैं)। – vcsjones
['string.compareTo'] से (http://msdn.microsoft.com/en-us/library/fkw3h78a (v = vs.110) .aspx) दस्तावेज़: * कैरेक्टर सेट ** में अनजान वर्ण शामिल हैं। * * तुलनात्मक विधि इस तरह के पात्रों पर विचार नहीं करती है जब यह संस्कृति-संवेदनशील तुलना करता है। उदाहरण के लिए, यदि निम्नलिखित कोड .NET Framework 4 या बाद में चलाया जाता है, तो "एनी-माल" (सॉफ्ट मुलायम हाइफ़न या यू + 00 एडी का उपयोग करके) "जानवर" की तुलना इंगित करती है कि दो तार बराबर हैं। * –
@ युवाल आपका उद्धरण उस वीसीएसजेन्स पर संदेह करने के विपरीत है। –