web-dev-qa-db-ja.com

変数がアドホックな値のリストにあるかどうかを確認します

このようなものを書く短い方法があります:

if(x==1 || x==2 || x==3) // do something

私が探しているのは次のようなものです:

if(x.in((1,2,3)) // do something
44
user1854438

List.Contains メソッドを使用してこれを実現できます。

if(new []{1, 2, 3}.Contains(x))
{
    //x is either 1 or 2 or 3
}
50
Ilya Ivanov
public static bool In<T>(this T x, params T[] set)
{
    return set.Contains(x);
}

...

if (x.In(1, 2, 3)) 
{ ... }

必要な読み取り: MSDN拡張メソッド

31
Austin Salonen

IEnumerable<T>にある場合は、これを使用します:

if (enumerable.Any(n => n == value)) //whatever

さもなければ、ここに短い拡張メソッドがあります:

public static bool In<T>(this T value, params T[] input)
{
    return input.Any(n => object.Equals(n, value));
} 

static classに入れれば、次のように使用できます。

if (x.In(1,2,3)) //whatever
11
It'sNotALie.

私はここで完全に推測していますが、間違っている場合はコードを修正してください:

(new int[]{1,2,3}).IndexOf(x)>-1
0
Isaac