试图改写这个使用LINQ:如何检查字符串是否不等于所有这些?
if (mode != "A" && mode != "B" && mode != "C" && mode != "D" && mode != "E" && mode != "F" && mode != "G")
{
continue;
}
什么是重构这个最简洁明了的方式吗?我可以发誓我之前看过这样的帖子,但目前我找不到它。
试图改写这个使用LINQ:如何检查字符串是否不等于所有这些?
if (mode != "A" && mode != "B" && mode != "C" && mode != "D" && mode != "E" && mode != "F" && mode != "G")
{
continue;
}
什么是重构这个最简洁明了的方式吗?我可以发誓我之前看过这样的帖子,但目前我找不到它。
您可以使用从IList<T>
Contains
方法:
IList<string> modes = new[]{"A","B","C","D","E","F","G"};
if (!modes.Contains(mode))...
var modes = new[] { "A","B","C","D","E","F","G"};
if (modes.All(a => mode != a))
continue;
编写扩展方法的字符串类
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;
}
我ü 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;
}
string s = "ABCDEFG";
bool res = s.Any(item => { return (int)item > 64 && (int)item < 72; });
哈我害怕有人会发布这样的东西。字符串值并不像字母表一样简单,只是用来简化问题。 –
Contains是更有用的linq扩展方法之一 – Adrian
@Adrian这个特殊的'Contains(...)'甚至不是LINQ(来自LINQ的那个更通用)。 – dasblinkenlight
你的第一行有什么不同:'string [] modes = {“A”,“B”,“C”,“D”,“E”,“F”,“G”};'与在下面一行中包含'方法? –