2016-01-11 2 views
-5

Как остановить IEnumberable из перечисления всех элементов в рассматриваемой переменной. У меня есть функция, которой я передаю список IEnumerable, и он всегда будет иметь только два элемента. Однако мне нужна функция только для первого элемента, не более того, не меньше. Как мне заставить его пройти только первый элемент?Остановить IEnumerable из перечисления всех элементов

Примечание: Поскольку есть только два элемента, я попытался передать их отдельно (например, doubledouble), но он все еще проходит через оба.

+6

Вы не изображены код? –

+6

Почему вы не можете использовать '.First()' или '.FirstOrDefault()', чтобы получить первый элемент из списка? Или даже 'list [0]'? – ChrisF

+1

Почему вы даже итерируете по перечислимому? Если у него всегда есть два элемента (как вы уверены в этом?), И вы хотите только первый элемент, просто нацелитесь на первый ... –

ответ

1

Вы можете использовать метод Take, чтобы сделать что-то вроде этого:

profile = profile.Take(1); 

Теперь, когда вы перечислить profile, вы будете идти только через один пункт.

+0

Может быть полезно использовать 'First' или' FirstOrDefault' вместо этого, чтобы вы получили 'T', а не' IEnumerable '(даже если он гарантированно имеет 0..1) – Rob

+0

@Rob -' First' и 'FirstOrDefault' не возвращают' IEnumerable ', они возвращают экземпляр объекта. Метод ожидает 'IEnumerable ' OP может изменить метод, чтобы принять экземпляр 'T', а затем сделать, как вы предлагаете. –

+0

@ChrisDunaway Это именно то, что я сказал, что вы должны использовать 'First *', чтобы вы получили 'T' и * not *' IEnumerable '. Я бы предположил, что это также может быть в методе, который принимает 'IEnumerable ' (если изменение объявления было невозможно). – Rob

0

Следующий код показывает:

Вернувшиеся 0

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

public static void Main() 
{ 
    var numbers = GetNumbers(2); 

    var result = numbers.Take(1); 

    // Evaluate only first number 
    result.ToArray();  
} 

public static IEnumerable<int> GetNumbers(int max) 
{ 
    for(int i = 0; i < max; i++) 
    { 
     Console.WriteLine("Returning {0}", i); 
     yield return i; 
    } 
} 
Смежные вопросы