Наиболее краткий способ определить, равна ли переменная величине из «списка» значений


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 30 сен. 082008-09-30 13:38:51

  0

Пример javascript http://stackoverflow.com/questions/12116326 21 янв. 152015-01-21 21:23:45

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

0

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


-1

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

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

используя некоторые бинарную математику ...

testList = 4 + 16 + 64 => 1010100
TestValue = 16
TestResult = testList & TestValue


1

Вы можете сделать что-то подобное с .NET 2.0, воспользовавшись тем, что массив O f T реализует IList <T>, а IList <T> имеет метод Содержит. Поэтому следующий эквивалентен решением Кори .NET 3.5, хотя, очевидно, менее ясно:

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

Я часто использую IList <T> для объявления массива, или, по крайней мере, для передачи одномерных аргументов массива. Это означает, что вы можете использовать свойства IList, такие как Count, и легко переключаться с массива на список. Например.

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