4

LINQ を使用してこれを書き直そうとしています:

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

これをリファクタリングする最も明確で簡潔な方法は何でしょうか? 私は以前にこのような投稿を見たことがあると断言できましたが、現時点では見つけられません.

4

5 に答える 5

10

Contains次のメソッドを使用できますIList<T>

IList<string> modes = new[]{"A","B","C","D","E","F","G"};
if (!modes.Contains(mode))...
于 2012-11-02T15:21:54.907 に答える
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;
}
于 2012-11-02T15:22:42.993 に答える
1
var modes = new[] { "A","B","C","D","E","F","G"};

if (modes.All(a => mode != a)) 
    continue;
于 2012-11-02T15:21:42.320 に答える
1
string s = "ABCDEFG";
bool res = s.Any(item => { return (int)item > 64 && (int)item < 72; });
于 2012-11-02T15:28:38.147 に答える
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;
}
于 2012-11-02T15:24:29.220 に答える