2008-08-20 81 views
9

如果我有一個C#中的變量需要檢查,以確定它是否等於一組變量之一,什麼是最好的方法來做到這一點?最簡潔的方式來確定一個變量是否等於值的「列表」值

我不是在尋找一個將數組存儲在數組中的解決方案。我更好奇看看是否有解決方案以某種方式使用布爾邏輯來獲得答案。

我知道我可以做這樣的事情:

int baseCase = 5; 
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5; 

我很好奇,看看我能不能做更多的事情是這樣的:

int baseCase = 5; 
bool testResult = baseCase == (3 | 7 | 12 | 5); 

顯然上面的都不行,但我有興趣看看是否有比第一個例子更簡潔的東西,它必須對每個測試值反覆重複相同的變量。

UPDATE:
我決定接受CoreyN的答案,因爲它似乎是最簡單的方法。我認爲這是實用的,對於初學者來說,仍然很簡單。

不幸的是,在我工作的系統中,我們的系統使用了.NET 2.0框架,並且很快就沒有升級的機會。是否有任何其他的解決方案,在那裏,不依賴於.NET 3.5框架,除了最明顯的一個我能想到的:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5); 
+0

這是.NET 2。0解決方案,比Corey的複雜一點:http://stackoverflow.com/questions/18407#153037 – Joe 2008-09-30 13:38:51

回答

16
 bool b = new int[] { 3,7,12,5 }.Contains(5); 
0

我通常使用CoreyNsolution簡單的情況下,像那。任何更復雜的,使用LINQ查詢。

-1

由於您沒有指定您輸入的數據類型,我假設您可以將輸入劃分爲2 - > 2,4,8,16的權力......這將允許您使用這些位用於確定您的測試值是否是輸入中的某個位。

4 => 0000100
16 => 0010000
64 =>百萬

使用一些二進制數學...

testList = 4 + 16 + 64 => 1010100
測試值= 16
testResult = testList & testValue

1

你可以用類似於.NET 2.0的方法,利用數組o f T實現IList <T>和IList <T>有一個Contains方法。因此,以下是相當於科裏的.NET 3.5解決方案,但很明顯不太清楚:

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5); 

我經常使用的IList <Ť>爲數組聲明,或至少用於通過一維陣列參數。這意味着您可以使用IList屬性(如Count),並輕鬆地從數組切換到列表。例如。

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 }; 
相關問題