In meiner ewigen Suche nach weniger saugen Ich versuche, die "Ausbeute" Aussage zu verstehen, aber ich stoße immer wieder auf den gleichen Fehler.Einige helfen verstehen "Ausbeute"
Der Körper [somemethod] sein kann kein Iteratorblock weil 'System.Collections.Generic.List < AClass>' kein Iterator-Schnittstellentyp ist.
Dies ist der Code, wo ich stecken geblieben:
foreach (XElement header in headersXml.Root.Elements()){
yield return (ParseHeader(header));
}
Was mache ich falsch? Kann ich den Ertrag nicht in einem Iterator verwenden? Was ist der Sinn? In diesem Beispiel wurde angegeben, dass List<ProductMixHeader>
kein Iterator-Schnittstellentyp ist. ProductMixHeader
ist eine benutzerdefinierte Klasse, aber ich stelle mir vor List
ist ein Iterator-Interface-Typ, nein?
--Edit--
Danke für alle schnellen Antworten.
Ich weiß, diese Frage ist nicht so neu und die gleichen Ressourcen tauchen immer wieder auf.
Es stellte sich heraus, dass ich dachte, ich könnte List<AClass>
als Rückgabetyp zurückgeben, aber seit List<T>
ist nicht faul, kann es nicht. Ändern meiner Rückkehr Typ IEnumerable<T>
hat das Problem gelöst: D
Eine etwas verwandte Frage (nicht wert, einen neuen Thread zu öffnen): ist es wert IEnumerable<T>
als Rückgabetyp geben, wenn ich sicher bin, dass 99% der Fälle I‘ Ich werde gehen. ToList() sowieso? Was werden die Auswirkungen auf die Leistung sein?
Ich mag den possitiven Ansatz 'Quest, weniger zu saugen' ;-). –
Diese fast identische Frage hat einen Link zu einigen guten Raymond Chen Sachen: http://stackoverflow.com/questions/39476/what-is-the-yield-keyword-used-for-in-in-c –