2015-07-28 61 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