olarak adlandırılır. Şu anda bir akıştan öğe koleksiyonu okuyorum.verim her zaman
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
}
}
}
Let İki öğeleri içeren bir akışı var ki, ben aşağıdakileri yapın: Ben şöyle bunu result2
biri iken
var textReader = //Load textreader here
var parser = new Parser(textReader);
var result1 = parser.Items.Count();
var result2 = parser.Items.Count();
Şimdi
result1
, 2'dir.
Şimdi fark ettim ki, boş çekmem işe yaramaz mı? Görünüşe göre, her seferinde bu fonksiyonu çağırıyorum.
Birisi bana bunun neden olduğunu açıklayabilir mi? Ve bu durum için en iyi çözüm ne olurdu (lütfen bana ne yaptığımı söyleyeyim tamam mı?). LoadItems
(yield
kullanır) tembel enumerable ve bir alana atamadan Çünkü
yup, her seferinde vermelidir yüzden onun her zaman boş ve yük öğeleri her zaman denir. –
Lütfen yanılıyorsam beni düzeltin ama ben burada atadım '_items = LoadItems() ' –