2012-11-02 55 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

哈我害怕有人会发布这样的东西。字符串值并不像字母表一样简单,只是用来简化问题。 –

相关问题