試圖改寫這個使用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」};'與在下面一行中包含'方法? –