Самый краткий способ определить, равна ли переменная значению из «списка» значений - PullRequest
9 голосов
/ 20 августа 2008

Если у меня есть переменная в 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);

Ответы [ 4 ]

16 голосов
/ 20 августа 2008
        bool b = new int[] { 3,7,12,5 }.Contains(5);
1 голос
/ 30 сентября 2008

Вы можете сделать нечто подобное с .NET 2.0, воспользовавшись тем, что массив T реализует IList , а в IList есть метод Contains. Следовательно, следующее решение Corey .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 };
0 голосов
/ 10 сентября 2008

Поскольку вы не указали тип данных, которые вы используете в качестве входных данных, я предполагаю, что вы можете разделить свой ввод на степени 2 -> 2,4,8,16 ... Это позволит вам использовать биты, чтобы определить, является ли ваше тестовое значение одним из битов на входе.

4 => 0000100
16 => 0010000
64 => 1000000

с использованием некоторой двоичной математики ...

testList = 4 + 16 + 64 => 1010100
testValue = 16
testResult = testList & testValue

0 голосов
/ 20 августа 2008

Я обычно использую CoreyN решение для простых случаев, подобных этому. Что-нибудь более сложное, используйте запрос LINQ.

...