2011-11-18 61 views
6

將字符串與==進行比較是否是一種好習慣?根據CompareEquals方法string是否有相當於s1 == s2。如果使用這些方法,而不指定CultureInfo FxCop會發出警告,這是一個真正的問題嗎?將C#字符串與'=='進行比較是否是一種好的做法?

+0

你想做什麼樣的比較? –

+1

取決於你在比較什麼 - msdn是完美的http://msdn.microsoft.com/en-us/library/cc165449。aspx – JonH

+1

這個頁面有一個很好的解釋:http://www.dotnetperls.com/string-equals – keyboardP

回答

14

==運算符是序數,文化不知道的字符串比較。它使用與.Equals相同的內部調用,並且對於「常用」字符串比較來說很好。

如果您需要文化感知comparings(如圖形界面的目的),如德國雙S或SS,使用

CultureInfo ci = new CultureInfo("de-DE"); 
String.Compare("Strasse", "Straße", true, ci) 
2

當你比較字符串,你應該使用顯式地指定什麼樣的方法您打算執行的比較。這使您的代碼更易於維護和閱讀。在可能的情況下,使用帶有StringComparison枚舉參數的System.String和System.Array類的方法的重載,以便可以指定要執行的比較類型。比較字符串時最好避免使用==和!=運算符。另外,避免使用String.CompareTo實例方法,因爲沒有重載需要StringComparison。

根據您的需求,您可以在下一方法使用:

bool result = root.Equals(root2, StringComparison.Ordinal); 
result = root.Equals(root2, StringComparison.OrdinalIgnoreCase); 
bool areEqual = String.Equals(root, root2, StringComparison.Ordinal); 

來源爲這樣的回答:http://msdn.microsoft.com/en-us/library/cc165449.aspx

2

extensivedocumentation MSDN上談到有關文化敏感字符串比較。 序數比較不關心語言學,並在默認情況下,將涉及案件。 文化敏感比較確實關心語言學(案例,puncutation等)。

dotnetperls上的這個article深入瞭解性能影響,甚至顯示了兩種字符串比較方法(==equals)的IL和基準。

最後,這question表明==是嚴格意義上的字符串比較,不適合用於本地化字符串。

1

如果一個字符串可能爲null或空(又名「」),你想使用string.IsNullOrEmpty(...);

否則在我的書或大多數東西罰款。取決於你在做什麼。

相關問題