目前我正在閱讀流中的項目集合。我這樣做如下:收益總是被調用
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();
現在result1
是2,而result2
就是其中之一。
現在我注意到,我的空檢查是無用的?似乎每次我稱之爲功能時,它都會變成無用的。
有人可以向我解釋爲什麼這是?對於這種情況,最好的解決方案是什麼?(請告訴我,我所做的是完全廢話:P)。
是的,它應該產生每次因爲你沒有任何地方分配「_items」變量所以它總是空,每次調用加載項目。 –
請糾正我,如果我錯了,但不是我在這裏分配'_items = LoadItems()' –