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

StackOverflow https://stackoverflow.com/questions/18407

  •  09-06-2019
  •  | 
  •  

Вопрос

Если у меня есть переменная в C #, которую нужно проверить, чтобы определить, равна ли она одной из набора переменных, каков наилучший способ сделать это?

Я не ищу решение, которое хранит набор в массиве.Мне больше любопытно посмотреть, есть ли решение, которое каким-то образом использует логическую логику для получения ответа.

Я знаю, что мог бы сделать что-то подобное:

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

Мне любопытно посмотреть, смогу ли я сделать что-то более подобное:

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

Очевидно, что вышеприведенное не сработает, но мне интересно посмотреть, есть ли что-то более сжатое, чем мой первый пример, в котором нужно повторять одну и ту же переменную снова и снова для каждого тестового значения.

Обновить:
Я решил принять ответ Корэйна, поскольку это кажется самым простым подходом.Я думаю, это практично и все еще просто для понимания новичка.

К сожалению, там, где я работаю, наша система использует .NET 2.0 Framework, и нет никаких шансов на обновление в ближайшее время.Существуют ли какие-либо другие решения, которые не зависят от платформы .NET 3.5, помимо самого очевидного, о котором я могу подумать:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
Это было полезно?

Решение

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

Другие советы

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

Обычно я использую КореиН's решение для таких простых случаев, как этот.Для чего-то более сложного используйте запрос LINQ.

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

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

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

Список тестов = 4 + 16 + 64 => 1010100
Тестовое значение = 16
TestResult = Список тестов и значение теста

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top