C# 检查变量是否在临时值列表中

C# 检查变量是否在临时值列表中,c#,variables,contains,C#,Variables,Contains,有没有一种更简短的方式来写这样的东西: 如果x==1 | | x==2 | | x==3//做点什么 我要找的是这样的东西: if (x.In(1,2,3)) //whatever Select Case X Case 1, 2, 3 ... End Select 如果x.in1,2,3//做点什么 您可以使用以下方法实现此目的: 我完全在猜测,如果我错了,请更正代码: (new int[]{1,2,3}).IndexOf(x)>-1 必读内容:如果它位于IEnum

有没有一种更简短的方式来写这样的东西:

如果x==1 | | x==2 | | x==3//做点什么 我要找的是这样的东西:

if (x.In(1,2,3)) //whatever
Select Case X
    Case 1, 2, 3
    ...
End Select
如果x.in1,2,3//做点什么
您可以使用以下方法实现此目的:


我完全在猜测,如果我错了,请更正代码:

(new int[]{1,2,3}).IndexOf(x)>-1
必读内容:

如果它位于IEnumerable中,请使用以下内容:

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));
} 
您可以创建一个简单的字典,用于解决该问题:

        //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.
初始化词典后,只需执行以下操作:


决策表[编号测试]

这个答案指的是C未来可能的版本- 如果您考虑切换到Visual Basic,或者如果微软最终决定将SELECT case语句引入到C中,它将是这样的:

if (x.In(1,2,3)) //whatever
Select Case X
    Case 1, 2, 3
    ...
End Select

如果x>=1&&x您的方式有什么问题?你还有更多的比较吗?因为前者仅用于3次甚至4次比较,通常比后者更具可读性。第一个有什么问题?它足够短,解释它自己,并且是你将要得到的最有效的。当你做x==A | | x==B | | x==C | | | | | |你要表达的是:x在集合{A,B,C,…,Z}中?因此{A,B,C,…,Z}中最清晰的语法是x。当条件不同时,应该使用| |。甚至可以将其更新为使用params,以便获得类似于x.In1,2,3的编辑:当然,在这一点上,您可以编写x。这有点愚蠢。另一方面,避免使用现有的IEnumerable版本,在该版本中,您可以传入x.Innull并抛出一个异常可能会更好,您听说过params吗?虽然这绝对是优雅的,但我个人讨厌适用于所有事物的扩展方法+1尽管如此:我喜欢优雅:我一直得到这个错误扩展方法只能在非泛型非静态类“@user1854438:No”中声明。它必须在单独的公共类中声明。我已经更新了答案,添加了一个链接,可以让你继续使用扩展方法。FGITW再次攻击你!我认为您需要n=>object.Equalsn,value,因为a防止null,而b确保非值类型有机会实现值相等。我想用Contains代替Any也可以达到同样的效果。哦,别忘了右括号。我把它放在同一个类中。当我运行这个时,我得到了系统。数组没有实现Contains。您正试图对System.Collections.Generic中的数组方法应用System.Collections.Generic中的列表方法。这是我见过的最小的过度工程的单个单元之一。这是最干净、最快的方法之一。这就是执行if条件所需的全部操作:decisionTable[theNumberToTest];我喜欢人们用O来证明某件事比另一件事“快”。它闻起来有新鲜肉的味道,还有薄荷味。如果你只做了一次测试,那么这很容易比包含慢-正在创建字典,就像创建和扫描列表一样。@Ryan字典只能创建一次。
Select Case X
    Case 1, 2, 3
    ...
End Select