Check if a variable is in an ad-hoc list of values

2019-01-23 00:54发布

Is there a shorter way of writing something like this:

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

What I'm looking for is something like this:

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

7条回答
时光不老,我们不散
2楼-- · 2019-01-23 01:19

This answer refers to a possible future version of C# ;-) If you consider switching to Visual Basic, or if Microsoft finally decides to introduce the Select Case statement to C#, it would look like this:

Select Case X
    Case 1, 2, 3
    ...
End Select
查看更多
我只想做你的唯一
3楼-- · 2019-01-23 01:20

If it's in an IEnumerable<T>, use this:

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

Else, here's a short extension method:

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

Put it in a static class, and you can use it like this:

if (x.In(1,2,3)) //whatever
查看更多
forever°为你锁心
4楼-- · 2019-01-23 01:20

You can create a simple Dictionary<TKey, TValue> that'll be used as a Decision Table for that problem:

        //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.

Once you've initialized your Dictionary, all left to do is:

decisionTable[theNumberToTest]();

查看更多
聊天终结者
5楼-- · 2019-01-23 01:24

You could achieve this by using the List.Contains method:

if(new []{1, 2, 3}.Contains(x))
{
    //x is either 1 or 2 or 3
}
查看更多
家丑人穷心不美
6楼-- · 2019-01-23 01:32
public static bool In<T>(this T x, params T[] set)
{
    return set.Contains(x);
}

...

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

Required reading: MSDN Extension methods

查看更多
beautiful°
7楼-- · 2019-01-23 01:42
int x = 1;
if((new List<int> {1, 2, 3}).Contains(x))
{
}
查看更多
登录 后发表回答