2013-07-10 68 views
56

如何使以下輸入不區分大小寫?如何使String.Contains不區分大小寫?

myString1.Contains("AbC") 
+1

或MSDN文章[String.Contains(HTTP的重複:// MSDN。 microsoft.com/en-us/library/dy85x1sa.aspx)它建議「另見:IndexOf」... –

+0

那麼,這個問題是不是100% - 重複,如果它要求在VB.Net的答案,因爲VB .Net具有C#沒有的功能,就像這裏可以使用的'LIKE'運算符一樣。 – sloth

+0

他標記了兩種語言,所以他可能不關心解決方案是哪一種,所以重複完全回答這個問題。無論如何,如果他用onlt vb.net編輯他的問題,那麼它會自動進入重新打開隊列。 – SysDragon

回答

10
bool b = list.Contains("Hello", StringComparer.CurrentCultureIgnoreCase); 

[編輯]擴展代碼:

public static bool Contains(this string source, string cont 
                , StringComparison compare) 
{ 
    return source.IndexOf(cont, compare) >= 0; 
} 

這可能是工作:)

+13

這種方法是不存在的標準C# –

+1

這是問題的原因...謝謝@trippino – iGanja

+0

@trippino編輯我與擴展代碼 – wudzik

39

您可以使用:

if (myString1.IndexOf("AbC", StringComparison.OrdinalIgnoreCase) >=0) { 
    //... 
} 

這適用於任何.NET版本。

+3

兩個錯別字在你的答案,否則好;-)它應該(顯然)'StringComparison.OrdinalIgnoreCase' – andreas

110

您可以創建自己的擴展方法來做到這一點:

public static bool Contains(this string source, string toCheck, StringComparison comp) 
    { 
    return source != null && toCheck != null && source.IndexOf(toCheck, comp) >= 0; 
    } 

然後調用:

mystring.Contains(myStringToCheck, StringComparison.OrdinalIgnoreCase); 
+2

這可以說是最好的答案,將它包裝在擴展方法中。 –

+6

@ Moo-Juice是的,因爲它是熟悉的:) http://stackoverflow.com/a/444818/447156 –

+4

我會建議調用函數,而不是與框架中的東西完全匹配,比如你的名字首字母+包含。我用這種方法處理很多事情。我的首字母是PS,所以我有psContains,psStartsWith,psEndsWith等。我認爲它應該有所不同的原因是,只要通過閱讀代碼就可以知道它將要做什麼。另外,如果簽名是兼容的,編譯器可能不喜歡它。如果它們足夠兼容,編譯無法幫助您發現您的擴展是否在發揮作用。擴展程序是Dotnet真正的寶石。如果使用正確:) –