В настоящее время я читаю коллекцию элементов из потока. Я делаю это следующим образом:
public class Parser{
private TextReader _reader; //Get set in Constructor
private IEnumerable<Item> _items;
public IEnumerable<Item> Items{
get{
//I >>thought<< this would prevent LoadItems() from being called twice.
return _items ?? (_items = LoadItems());
}
}
public IEnumerable<Item> LoadItems(){
while(_reader.Peek() >= 0){
yield return new Item(_reader.ReadLine()); //Actually it's a little different
}
}
}
Допустим, у меня есть поток, содержащий два элемента, и я делаю следующее:
var textReader = //Load textreader here
var parser = new Parser(textReader);
var result1 = parser.Items.Count();
var result2 = parser.Items.Count();
Теперь результат1
равен 2, а результат2
равен единице. .
Теперь я заметил, что мой нулевой чек бесполезен? Кажется, что каждый раз, когда я вызываю эту функцию, она все равно возвращается.
Может кто-нибудь объяснить мне, почему это так? И какое было бы лучшее решение в этой ситуации (скажите, пожалуйста, то, что я делаю, полная чушь: P).