2013-03-23 21 views
10

Sadece İngilizce dizeleri söz konusu olduğunda, StringComparison.OrdinalIgnoreCase ve StringComparison.InvariantCultureIgnoreCase aynı işi yaptıklarını düşündüm. Ancak şu kod üzerinde çalışıyorum:Neden OrdinalIgnoreCase ve InvariantCultureIgnoreCase farklı sonuçlar döndürüyor?

// Returns 0 
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.InvariantCultureIgnoreCase) 

// Returns -1 
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.OrdinalIgnoreCase) 

Belirli bir nedeni var mı?

+2

[InvariantCulture ve Ordinal dize karşılaştırması arasındaki fark] 'ın olası kopyası (http://stackoverflow.com/questions/492799/difference-between-invariantculture-and-ordinal-string-comparision) –

+3

@ DanielA.White Bu soru en kesinlikle _not_ bu sorunun bir kopyası. Bunu okumadığınızı düşünüyorum. – Virtlink

cevap

23
"‎877495169fa05b9d8639a0ebc42022338f7d2324" 

Bir hile sorusu gibi görünüyor. İlk dize 8'den önce bu dize başında ekstra bir karakter var. Tarayıcıda görünmez. U + 200E, "Soldan Sağa İşaret". Sıralı karşılaştırma bu karakteri görür, değişmeyen karşılaştırmayı yok sayar. Dizede ToCharArray() öğesini kullanarak kendiniz görebilirsiniz.

"877495169fa05b9d8639a0ebc42022338f7d2324" 

Ve olması gerektiği gibi karşılaştırın() yöntemi şimdi 0 döndürür:

o dizeyi silin ve yerine bunu yapıştırın ondan U + 200E kaldırıldı. Şu anda kullandığınız metin düzenleyicisine veya IME'ye dikkat edin. Unicode eğlenceli değil mi?

+0

Güzel bir şekilde lekeli. Not Defteri'nde +, bir soru işareti olarak görünür: "" 877495169fa05b9d8639a0ebc42022338f7d2324 "'. – Virtlink

+3

Teşekkürler! Bu bir hile sorusu değil, aslında bu dizgeyi certmgr.msc'den programımın parmak izi olarak kopyaladım ve karşılaştırma başarısız oldu. Görünmez karakterler içerebilecek hiçbir fikrim yoktu. Visual Studio, bu karakterleri de göstermez. Bu eğlenceli! –

+1

Tamam, bu daha mantıklı. Kayıt için: Windows'un hangi dil sürümü bunu üretti? –

İlgili konular