2012-11-08 15 views
10

संभव डुप्लिकेट:
Why does string.Compare seem to handle accented characters inconsistently?स्ट्रिंग आंशिक तुलना

मैं निम्नलिखित कोड

var s1 = "ABzzzzz2"; 
var s2 = "äbzzzzz1"; 

var cmp = StringComparison.InvariantCultureIgnoreCase; 

Console.WriteLine(string.Compare(s1, 0, s2, 0, 7, cmp)); //prints -1 
Console.WriteLine(string.Compare(s1, 0, s2, 0, 8, cmp)); //prints 1 

कैसे यह पहली स्ट्रिंग का वह हिस्सा हो सकता है है भाग से भी कम है दूसरे की, जबकि पूरी पहली स्ट्रिंग पूरे दूसरे से अधिक है?
मैंने इसका परीक्षण x64, .net 2.0, 3.5, 4.0

+1

ऐसा लगता है कि अंत में संख्या क्रम को परिभाषित करने में प्राथमिकता लेती है। –

+1

@Jan वही परिणाम '2' के साथ' बी', '1'' के साथ बदल दिया गया। – Rawling

+2

आप अपने नमूना को सरल बना सकते हैं: 'var s1 = "a2"; var s2 = "ä1"; 'बीटीडब्ल्यू, उमलॉट मायने रखता है। –

उत्तर

1

मेरा सिद्धांत यह है कि एल्गोरिदम पहले स्ट्रिंग को सामान्य करता है और फिर तुलना करता है। इस "äbzzzzz1" के अनुसार "abzzzzz1" के रूप में सामान्यीकृत। सामान्यीकृत रूप में पहली तुलना परिणाम समानता है लेकिन 0 लौटने से वास्तविक तार बराबर नहीं होंगे क्योंकि वास्तविक तार बराबर नहीं हैं। तो यह क्रमिक तुलना और परिणाम -1 में बदल जाता है।

दूसरे मामले में, सामान्यीकरण के बाद, यह स्पष्ट है कि "abzzzzz2" "abzzzzz1" से अधिक है तो परिणाम है 1.

यह दृष्टिकोण भी this question में उल्लेख किया है सामान्यीकरण के लिए मामलों बताते हैं विवरण की जाँच MSDN page

संबंधित मुद्दे