C#表达式等于多个值

时间:2015-07-28 11:32:53

标签: c# if-statement

我确定答案是肯定的,但我很好奇,并且认为我会问你们,为了确定答案。

在SQL中你可以说:

IF ( a IN ( x, y ) )

C#中有类似的东西吗?我知道你可以使用一个开关但我在if语句中寻找特别可能的东西,因为有多个表达式,如:

IF ( a == b && c IN ( x, y ) )
IF ( a == b && c == ( x || y ) )

编辑:好的,我看到我过于简单,因为数组示例相当明显,我没有想到它。如果它是一个更复杂的东西怎么样:

if ( a.GetType() == typeof( MyClass1 ) || a.GetType() == typeof( MyClass2 ) )

Edit2:只是为了澄清,这不是Is there a C# IN operator?的重复,因为这个问题的答案没有解决我的问题,因为我使用的例子可能有点差,但它是唯一的关系我当时想到的。 Palani Kumar提供的答案就是我要找的答案。

编辑3:感谢所有人的努力。非常清楚,有很多方法可以达到相同的结果(我现在也明白,他们几乎是同样的事情,只是表达了不同的),由于你的意见,我已经能够进一步阅读每一个。我也设法找到this "if statements matching multiple values"帖子,是的,我完全同意这也是我所要求的重复。根据反馈意见,我不仅学到了很多东西,还设法实现了一个优雅的解决方案:

public static bool In<T>( this T obj, params T[] list )
{
    return list.Contains( obj );
}

2 个答案:

答案 0 :(得分:6)

Contains应该符合您的需求

List<char> validChars = new List<char>() { 'x', 'y' };
char a = 'y';

if (validChars.Contains(a))
{
    //do sth.
}

更新更新至更新的问题:处理Type而不是char

List<Type> validTypes = new List<Type>(){ typeof(MyClass1)  ,typeof( MyClass2 )};   
MyClass1 a = new MyClass1();  

if (validTypes.Contains(a.GetType()))
{
    //do sth.
}

答案 1 :(得分:1)

<强>的Sample1:

if (new[] { "String1", "String2" }.Any(x => x == "MyValue"))
{
}

<强>样品2:

if (new[] { new { Prop1 = "Value1" }, new { Prop1 = "Value2" } }.Any(x => x.Prop1 == "MyValue"))
{
}

<强>样品3:

if (new[] { typeof(MyClass1), typeof(MyClass2) }.Any(x => x == a.GetType()))
{
}