2015-07-28 35 views
0

我敢肯定答案是否定的,但我很好奇,并且认为我会问你的boffins只是为了确定。C#表达式等于多个值

在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); 
} 
+1

什么是'C'例如类型? –

+0

为了公平起见,我认为@PalaniKumar的答案*与有标记的副本中的答案相同。创建一个集合并使用'.Any'与创建一个数组并使用'.Contains'基本相同。 –

+0

@MattBurland谢谢马特,昨晚我也反映了它,它确实开始有意义。在我问了我的问题之后,我确实找到了一些相关材料,但在此之前,当我进行了一系列搜索时,我无法找到任何这就是为什么我认为答案是否定的,因此我询问了 – Storm

回答

1

样本1:

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())) 
{ 
} 
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. 
} 
+0

或者如果它是一个数组,使用'Array.IndexOf'。 –

+3

另请参阅http://stackoverflow.com/a/833477/1336590 – Corak

+0

谢谢@Fubo,当它变得更复杂时呢?我编辑了我的问题,尝试显示或多或少提示原始问题的内容。 – Storm