您可以從命名空間System.Linq的使用擴展方法.Contains()
:
if (abc.ToLower().Contains('s')) { }
沒有,檢查一個布爾表達式爲true,則不需要== true
由於Contains
方法是一種擴展方法,我的解決方案似乎讓一些人感到困惑。以下是不需要你兩個版本添加using System.Linq;
:
if (abc.ToLower().IndexOf('s') != -1) { }
// or:
if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
更新
如果你願意,你可以寫自己的擴展方法,方便重用:
public static class MyStringExtensions
{
public static bool ContainsAnyCaseInvariant(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1;
}
public static bool ContainsAnyCase(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1;
}
}
然後你可以這樣稱呼它:
if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }
在大多數情況下,當處理用戶數據時,您實際上想要使用CurrentCultureIgnoreCase
(或ContainsAnyCase
擴展方法),因爲這樣您可以讓系統處理取決於語言的大小寫問題。在處理計算問題時,如HTML標籤名稱等,您需要使用不變文化。
例如:在土耳其,在小寫大寫字母I
是ı
(無點),而不是i
(以點)。
嗯,我不覺得String.Contains的過載,需要一個char參數。 – 2013-03-13 21:19:02
@ScottSmith這是在[System.Linq](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx)中定義的擴展方法。你需要添加'使用System.Linq;' – pauloya 2013-08-29 15:29:08
我更喜歡使用'str.IndexOf('s')> = 0',但它可能只是一種風格上的差異。閱讀理解時,對我來說更有意義。 – CSS 2016-02-10 19:13:58