2015-04-01 1 views
0

В моем коде у меня есть IEnumerable:Вызов .Count в список, содержащийся внутри элемента в IEnumerable

IEnumerable<SomeType> listOfSomething = MethodWhichReturnsAnIEnumerable(param 1) 

Теперь, каждый элемент в listOfSomething, также содержит список чего-то другого, давайте называть его listOfRules. Мне нужно вернуть элементы в listOfSomething, которые имеют> 0 элементов в их listOfRules:

var result = listOfSomething.Where(x => x.listOfRules.Count > 0); 

Что это значит для исполнения? listOfRules - это List, поэтому мне любопытно, к какому звоню Count сделает с IEnumerable listOfSomething с точки зрения того, поместит ли он все в память.

ответ

2

С listOfRules является List, запрашивая Count свойства очень быстро, потому что для List он просто возвращает значение частного поля и не перебор всей коллекции каждый раз. Вот реализация, взятая из here:

// Read-only property describing how many elements are in the List. 
public int Count { 
    get { 
     Contract.Ensures(Contract.Result<int>() >= 0); 
     return _size; 
    } 
} 
1

Если listOfRules является List<T> с помощью Count будет просто вернуть сохраненное значение не будет перечислять коллекцию. Это не имеет никакого отношения к listOfSomething, listOfSomething будет перечисляться, и в каждом списке будет называться имущество Count. Так что не о чем беспокоиться.

+0

Спасибо за ответ. И вы, и @nikis утверждают, что это будет иметь небольшое влияние на производительность, и я не должен волноваться. Shoaib говорит, что это плохо для производительности, и вместо этого я должен использовать Any(). Вы бы использовали .Any()? – DSF

+0

@ D.Singh, он уже отредактировал свой ответ – nikis

0

list.Count просто возвращает значение поля так быстро. O (1) Таким образом, ваша общая производительность будет равна O (N), где N - количество записей в listOfSomething.