Если у меня есть переменная в C #, которую необходимо проверить, чтобы определить, равна ли она одной из набора переменных, каков наилучший способ сделать это?
Я не ищу решение, которое хранит набор в массиве. Мне более любопытно посмотреть, есть ли решение, которое каким-то образом использует булеву логику, чтобы получить ответ.
Я знаю, что мог бы сделать что-то вроде этого:
int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;
Мне любопытно посмотреть, смогу ли я сделать что-то вроде этого:
int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);
Очевидно, что вышеприведенное не сработает, но мне интересно узнать, есть ли что-то более лаконичное, чем мой первый пример, который должен повторять одну и ту же переменную снова и снова для каждого тестового значения.
ОБНОВЛЕНИЕ:
Я решил принять ответ CoreyN, поскольку это кажется самым простым подходом. Думаю, это практично, и все же просто для начинающего, чтобы понять.
К сожалению, там, где я работаю, наша система использует платформу .NET 2.0, и в ближайшее время нет никаких шансов на обновление. Существуют ли какие-либо другие решения, не основанные на .NET 3.5, кроме наиболее очевидного, о котором я могу подумать:
new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
bool b = new int[] { 3,7,12,5 }.Contains(5);
Поскольку вы не указали тип данных, которые вы используете в качестве входных данных, я предполагаю, что вы можете разделить свой ввод на степени 2 -> 2,4,8,16 ... Это позволит вам использовать биты для определения если ваше тестовое значение является одним из битов на входе.
4 => 0000100
16 => 0010000
64 => 1000000
используя некоторую двоичную математику ...
testList = 4 + 16 + 64 => 1010100
testValue = 16
testResult = testList & testValue
Вы можете сделать нечто подобное с .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 };