如何检查字符串是否与所有这些不相等?

时间:2012-11-02 15:17:30

标签: c# linq refactoring

尝试使用LINQ重写此内容:

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

重构这个最简洁明了的方法是什么?我本来可以发誓我以前见过这样的帖子,但我现在找不到它。

5 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分: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;
}

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我一直使用这种扩展方法

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;
}

答案 4 :(得分:1)

string s = "ABCDEFG";
bool res = s.Any(item => { return (int)item > 64 && (int)item < 72; });