2012-05-02 11 views
7

所以我有一個條件,目前看起來像這樣...檢查多個包含一個字符串

if (input.Contains(",") || input.Contains("/") || input.Contains(@"\") || input.Contains(".")) 

我要補充一點,我要檢查幾個字符,並想知道如果有一個更壓縮語法來完成同樣的事情?類似於SQL的IN操作符?

if (input IN (",", "/", @"\", ....etc) ) 

有人知道任何很酷的技巧來做到這一點無需增加大量的代碼?

+0

類似於這個問題http://stackoverflow.com/questions/194930/how-do-i-use-linq-containsstring-instead-of-containsstring – hatchet

+0

我看到了這個問題,我是希望我能找到一個更簡單的解決方案,因爲我知道我提前搜索的所有角色(我非常感謝所有答案!)。 –

+0

[VB.NET - 將多個字符串添加到.contains]的可能重複(http://stackoverflow.com/questions/2212719/vb-net-adding-more-than-1-string-to-contains) – KyleMit

回答

22

考慮使用正則表達式(指定要在括號檢查字符 - 記住,他們中的一些必須進行轉義):

Regex.IsMatch(input, @"[,/]"); 

new[] {",", "/"}.Any(input.Contains) 
8

這個怎麼樣?

if(input.IndexOfAny(new char[] { ',', '/', '\\', '.' })>=0) 
    { 

    } 
+0

只有一件事:IndexOfAny只處理單個字符,它不處理字符串。 – empi

+0

在OP中,只檢查單個字符。 – ja72

+1

當然,這只是一個側面說明,因爲IndexOf實際上有一個帶字符串的重載版本。 – empi

2

嘗試

If (input.IndexOfAny(new char[] { ',', '/', '\\', '.' }) >= 0) { 
    ... 
} 

If (input.IndexOfAny(@",/\.".ToCharArray()) >= 0) { 
    ... 
} 
3

你可以使用一些LINQ的:

if (",/\\.".ToCharArray().Any(c => input.Contains(c))) 
3

你可以使用String.IndexOfAny - 它會掃描的字符串數組中的任何一組字符:

if (e.Label.IndexOfAny(new char[]{',', '/', @'\', '.' /* other chars here */}) > -1) 
5

這是否贏得最短?

@".,/\".Any(input.Contains) 
3
"asdfasdf".ContainsAny(".","/","4"); 

public static bool ContainsAny(this string stringToCheck, params string[] parameters) 
{ 
    return parameters.Any(parameter => stringToCheck.Contains(parameter)); 
} 
+0

在C#中不起作用。類型字符串不包含「ContainsAny」的定義 – Drkawashima

相關問題