67

次のような短い書き方はありますか。

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

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

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

7 に答える 7

72

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

if(new []{1, 2, 3}.Contains(x))
{
    //x is either 1 or 2 or 3
}
于 2013-05-31T21:22:46.673 に答える
39
public static bool In<T>(this T x, params T[] set)
{
    return set.Contains(x);
}

...

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

必読: MSDN 拡張メソッド

于 2013-05-31T21:23:12.517 に答える
14

にある場合は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
于 2013-05-31T21:23:55.077 に答える
2
int x = 1;
if((new List<int> {1, 2, 3}).Contains(x))
{
}
于 2013-05-31T21:24:32.650 に答える
0

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

(new int[]{1,2,3}).IndexOf(x)>-1
于 2013-05-31T21:22:53.977 に答える
-4

その問題の決定表Dictionary<TKey, TValue>として使用される単純なものを作成できます。

        //Create your decision-table Dictionary
        Action actionToPerform1 = () => Console.WriteLine("The number is okay");
        Action actionToPerform2 = () => Console.WriteLine("The number is not okay");
        var decisionTable = new Dictionary<int, Action>
            {
                {1, actionToPerform1},
                {2, actionToPerform1},
                {3, actionToPerform1},
                {4, actionToPerform2},
                {5, actionToPerform2},
                {6, actionToPerform2}
            };

        //According to the given number, the right *Action* will be called.
        int theNumberToTest = 3;
        decisionTable[theNumberToTest](); //actionToPerform1 will be called in that case.

を初期化したらDictionary、あとは次のとおりです。

decisionTable[theNumberToTest]();

于 2013-05-31T21:58:57.960 に答える
-4

この回答は、C# の将来のバージョンの可能性を示しています ;-) Visual Basic への切り替えを検討している場合、または Microsoft が最終的に Select Case ステートメントを C# に導入することを決定した場合、次のようになります。

Select Case X
    Case 1, 2, 3
    ...
End Select
于 2016-01-27T09:47:50.100 に答える