2012-11-02 59 views
4

試圖改寫這個使用LINQ:如何檢查字符串是否不等於所有這些?

if (mode != "A" && mode != "B" && mode != "C" && mode != "D" && mode != "E" && mode != "F" && mode != "G") 
{ 
    continue; 
} 

什麼是重構這個最簡潔明瞭的方式嗎?我可以發誓我之前看過這樣的帖子,但目前我找不到它。

回答

10

您可以使用從IList<T>Contains方法:

IList<string> modes = new[]{"A","B","C","D","E","F","G"}; 
if (!modes.Contains(mode))... 
+0

Contains是更有用的linq擴展方法之一 – Adrian

+0

@Adrian這個特殊的'Contains(...)'甚至不是LINQ(來自LINQ的那個更通用)。 – dasblinkenlight

+0

你的第一行有什麼不同:'string [] modes = {「A」,「B」,「C」,「D」,「E」,「F」,「G」};'與在下面一行中包含'方法? –

1
var modes = new[] { "A","B","C","D","E","F","G"}; 

if (modes.All(a => mode != a)) 
    continue; 
2

編寫擴展方法的字符串類

public static bool In(this string s, params string[] values) 
{ 
    return values.Any(x => x.Equals(s)); 
} 

調用它以這種方式

if (!mode.In("A", "B", "C", "D","E","F", "G") 
{ 
    continue; 
} 
1

我ü SE這種擴展方法所有的時間

public static bool IsIn(this string source, params string[] parms) 
{ 
    return parms.Contains(source); 
} 

而且按如下方式使用它:

if (!mode.IsIn("A", "B", "C", "D", "E", "F", "G")) 
{ 
    continue; 
} 

下一步,如果你使用它了,是

public static bool IsNotIn(this string source, params string[] parms) 
{ 
    return !IsIn(source, params); 
} 

,你會得到略更具可讀性

if (mode.IsNotIn("A", "B", "C", "D", "E", "F", "G")) 
{ 
    continue; 
} 
1
string s = "ABCDEFG"; 
bool res = s.Any(item => { return (int)item > 64 && (int)item < 72; }); 
+0

哈我害怕有人會發布這樣的東西。字符串值並不像字母表一樣簡單,只是用來簡化問題。 –

相關問題