2011-09-27 4 views
1
string word1 = ""; //see example 
string word2 = "";  
bool b1 = word1.StartsWith(word2); 
bool b2 = word1.Substring(0, word2.Length) == word2; 

pour certaines chaînes arabes b1 n'est pas égal à b2? Pouvez-vous expliquer ce comportement?String.StartsWith ne fonctionne pas comme prévu

Exemple:

word1 = ((char)0x0650).ToString()+ ((char)0x0652).ToString()+ ((char)0x064e).ToString(); 
word2 = ((char)0x0650).ToString()+ ((char)0x0652).ToString(); 
+4

Pourriez-vous s'il vous plaît donner quelques exemples? – ojlovecd

+1

@Ahmed Ils évaluent tous les deux à 'true' comme prévu. –

+1

J'ai la chaîne arabe casser cette affaire! –

Répondre

7

Il y a une différence: .StartsWith effectue une comparaison sensible à la culture, alors que .Equals (ce que vous utilisez avec ==) ne fonctionne pas. Par conséquent, si vous avez deux chaînes, qui sont différentes lorsque vous les comparez caractère par caractère (== renvoie false), mais que vous êtes considéré comme égal par votre culture (startswith renvoie true), vous pouvez obtenir ce résultat.

EDIT Si j'essaie vos valeurs exemples avec ceci:

bool b1 = word1.StartsWith(word2, StringComparison.Ordinal); 
bool b2 = word1.Substring(0, word2.Length).Equals(word2, StringComparison.Ordinal); 

à la fois retour "True".

+0

J'ai utilisé toutes les valeurs StringComparison, mais c'est la même sortie –

+0

Mais j'utilise la culture arabe, dans ce cas il devrait donner le même résultat, même dans le cas de InvariantCulture, il ne le fait pas –

+0

@Ahmed [Performing Culture-Insensitive String Comparisons] (http: // msdn.microsoft.com/en-us/library/885e1sy1.aspx) –

Questions connexes