2011-09-27 38 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) –