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

对于某些阿拉伯字符串b1不等于b2? 你能解释这种行为吗?String.StartsWith无法正常工作

例子:

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

你能举一些例子吗? – ojlovecd

+1

@Ahmed他们都按照预期评估为“真实”。 –

+1

我有阿拉伯文字符串打破这种情况! –

回答

7

是有区别的:.StartsWith执行文化敏感的比较,而.Equals(你==使用什么)不。

所以,如果你有两个字符串,当你逐字符比较它们(==返回false),但是你的文化被认为是相同的(startswith返回true)时,你可能会得到这个结果。

编辑 如果我尝试用这个你的榜样值:

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

都返回 “真”。

+0

我使用了所有的StringComparison值,但它是相同的输出 –

+0

但我使用的是阿拉伯文化,在这种情况下它应该给出相同的结果,在InvariantCulture的情况下它也不会 –

+0

@Ahmed [执行文化不敏感字符串比较](http:// msdn.microsoft.com/en-us/library/885e1sy1.aspx) –