2016-08-19 3 views
0

Я хочу проверить, содержит ли перечисление 0, 1 или 1+ элементов. Я хочу избежать накладных расходов на перечисление всей последовательности, поэтому хочу избежать Count().Проверьте, содержит ли перечисление несколько элементов без исключения исключения?

Я знаю, что Linq-запрос SingleOrDefault() может быть использован для этой цели, но вместо этого добавляет громоздкую обработку исключений в случае 1+.

Любой способ сделать это без Count() и без исключения обработки?

+0

* Не * Используйте одинарные затем, используйте 'First' –

+1

Вы можете просто использовать' Count' –

+0

Вы спрашиваете, если он содержит * несколько * элементов и вы жалуетесь, что '' Single' или SingleOrDefault' выбросит исключение. Странно то, что эти два метода, хотя и бросают исключения, * не делают то, что вы говорите, что хотите сделать *. Можете ли вы прояснить, каков этот вопрос на самом деле? Вы хотите получить первый элемент, проверьте, содержит ли он 1 элемент, по крайней мере 2? –

ответ

4

Один подход, чтобы увидеть, если последовательность имеет более чем один элемент является использование Take и Count, как это:

if (mySequence.Take(2).Count() == 2) { 
    ... // Sequence has at least two elements 
} 

Take(2) пределы подсчета не более чем два, так что использование Count() не так дорого, как и в mySequence.Count() > 1.

Если вам нужно захватить первый элемент, сохраните результат Take в списке, чтобы избежать повторения последовательности.

0

Если вы хотите вернуть первый элемент, который соответствует определенным критериям, вы должны использовать First или FirstOrDefault, не Single

2
.ElementatOrdefault(1) != null 
+0

Ничего, но я думаю, что Take (n) .Count() немного яснее, без существенных различий в обработке перечислений/накладных расходов. –

2

Вы можете использовать пропуск и любой.

list.Skip(n).Any(); 
+0

Ничего, но я думаю, что Take (n) .Count() немного яснее, без существенных различий в обработке перечислений/накладных расходах. –

 Смежные вопросы

  • Нет связанных вопросов^_^