2013-07-30 2 views
1

According To MSDN: StringComparison.InvariantCulture:Уточнение StringComparison.InvariantCulture?

Определяет культуру, случай, и рода правила, которые будут использоваться определенными перегрузками string.Compare и методов String.equals.

Ну, я не делаю любого рода здесь, в моем образце, и до сих пор не понимаю, почему это дает результат его выход:

/*1*/ void Main() 
/*2*/ { 
/*3*/  string s1 = "lasst"; 
/*4*/  string s2 = "laßt"; 
/*5*/  Console.WriteLine (s1.Equals(s2, StringComparison.InvariantCulture)); 
/*6*/  //True 
/*7*/   
/*8*/   
/*9*/   
/*10*/  string s3 = "hello"; 
/*11*/  string s4 = "héllo"; 
/*12*/  Console.WriteLine (s3.Equals(s4, StringComparison.InvariantCulture)); 
/*13*/  //False 
/*14*/ } 

InvariantCulture использует правила сравнения, основанные на английский, но без каких-либо региональных вариаций

1) Так почему же говорит, что lasst равно laßt? (у одного даже нет английского символа ...)

2) И почему (если он сплющен по-английски) hello не равен héllo?

+0

Это не «сплющенный английский» - это просто, что правила * основаны на английском. Я думаю, что для более подробной информации вы, вероятно, должны посмотреть на unicode.org, который, вероятно, войдет в это в * lot * детали. –

+0

@JonSkeet Jon, Но 'ß' не является английским персонажем, так как он может быть основан на английском? –

+0

"Основано на"! = "Точно так же, как". –

ответ

5

Соответствующий фрагмент из книги CLR с помощью C#

Примечание Когда метод сравнения не выполняет порядковое сравнение, он выполняет разложения символов. Расширение символа - это когда символ расширяется до нескольких символов независимо от культуры. В приведенном выше случае немецкий символ Eszet 'ß' всегда расширяется до 'ss.' Аналогично, символ символа 'Æ' всегда расширяется до 'AE.' Таким образом, в примере кода второй вызов Compare всегда будет return 0 независимо от того, какую культуру я фактически передаю ему.

Строка «héllo» не преобразуется расширением символов внутри, и поэтому не считается равной «привет».

+0

thanks Позвольте мне посмотреть, есть ли у меня: '' ß' char звучит как 'ss', поэтому существует внутреннее правило, которое распространяется на' ss', и именно поэтому оно равно. и 'é' НЕ имеет правила, которые расширяют его (он не расширяется ---- p.s. почему? Потому что он не звучит одинаково?), и почему он отличается? –

+1

_sounds как 'ss', поэтому существует внутреннее правило_ - конечно, нет, это правило глубоко укоренилось в немецком обычае. –

+0

@HenkHolterman Я не понимаю - Какая часть именно в .net указывает, что «'ß' всегда расширяется до 'ss'. ? –