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

后端 未结 7 1188

Is there a shorter way of writing something like this:

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

Wha

相关标签:
7条回答
  • 2020-12-08 18:49

    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]();

    0 讨论(0)
  • 2020-12-08 18:51

    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
    
    0 讨论(0)
  • 2020-12-08 18:51
    int x = 1;
    if((new List<int> {1, 2, 3}).Contains(x))
    {
    }
    
    0 讨论(0)
  • 2020-12-08 18:51

    I'm entirely guessing here, correct the code if I'm wrong:

    (new int[]{1,2,3}).IndexOf(x)>-1
    
    0 讨论(0)
  • 2020-12-08 18:56

    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
    }
    
    0 讨论(0)
  • 2020-12-08 19:05
    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

    0 讨论(0)
提交回复
热议问题