Есть ли оператор C # IN? - PullRequest
79 голосов
/ 02 июля 2010

В SQL вы можете использовать следующий синтаксис:

SELECT *
FROM MY_TABLE
WHERE VALUE_1 IN (1, 2, 3)

Есть ли эквивалент в C #?Кажется, IDE распознает ключевое слово in как ключевое слово, но я не могу найти какую-либо информацию по нему.

Итак, возможно ли сделать что-то вроде следующего:

int myValue = 1;
if (myValue in (1, 2, 3))
    // Do something

Вместо

int myValue = 1;
if (myValue == 1 || myValue == 2 || myValue == 3)
    // Do something

Ответы [ 13 ]

1 голос
/ 26 февраля 2014

Для цифр от 0 до 9:

"123".Contains(myValue)

Для любого другого материала:

"|1|2|3|".Contains("|" + myValue + "|")
1 голос
/ 02 июля 2010

Нет оператора in, который ищет значение в коллекции, вместо этого это метод коллекции, который называется Contains.

. Наиболее масштабируемое решение - использовать HashSet в качестве коллекции.,Проверка значения в HashSet близка к операции O (1), по сравнению с выполнением этого в List, где это операция O (n).Это означает, что вы можете упаковать много значений в HashSet, и это все еще быстро, в то время как поиск значения в List становится медленнее, чем больше у вас значений.

Пример:

var set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);

var result = items.Select(i => set.Contains(i.value));
0 голосов
/ 02 июля 2010

Ключевое слово in в C # предназначено для оператора foreach и для выражений запросов LINQ.По сути, в C # нет функциональности, эквивалентной оператору in SQL, но LINQ предлагает аналогичную функциональность с Contains().

var list = {1, 2, 3}
var filtered = (
    from item in items
    where list.Contains(item)
    select item).ToArray().
.
...