2009-07-22 1 views
0

Siehe, der C# -Code:Eine Methode, die ein IEnumerable zurückgibt, kann seine Ausgabe von einer anderen Methode mit demselben Rückgabetyp abrufen?

IEnumerable<int> innerMethod(int parameter) 
{ 
    foreach(var i in Enumerable.Range(0, parameter)) 
    { 
     yield return i; 
    } 
} 

IEnumerable<int> outerMethod(int parameter) 
{ 
    foreach(var i in Enumerable.Range(1, parameter)) 
    { 
     foreach(var j in innerMethod(i)) 
     { 
       yield return j; 
     } 
    } 
} 

Die Frage ist: Es gibt einen Weg für outerMethod die gleiche Leistung haben über innerMethod Ausgang ohne laufen?

+0

Dies ist eine ziemlich häufig angeforderte Funktion, die normalerweise "Ertrag foreach" genannt wird. Wir unterstützen das nicht, aber einige "Forschungs" -Varianten von C# wie C-Omega tun es. Sie sollten Wes's Artikel darüber lesen: http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx –

+0

mögliche Duplikate von [Yield Return Many?] (Http: // stackoverflow.com/questions/3851997/yield-return-many) – nawfal

Antwort

4

Leider nicht.

In F # könnte man so etwas wie

yield! innerMethod(i) 

tun, aber es gibt kein Äquivalent in C#.

Ich meine, in diesem speziellen Fall könnte man die Methode mit ersetzen:

IEnumerable<int> outerMethod(int parameter) 
{ 
    return Enumerable.Range(1, parameter) 
         .SelectMany(x => innerMethod(x)); 
} 

aber ich erwarte, dass Sie einen allgemeineren Zweck Weise wollte, es zu tun. (Wenn das aber hilft, toll!)

+0

haben Sie in SelectMany bearbeitet? Ich bin sicher, ich habe es nicht gesehen, als ich antwortete ... –

+0

Yup, obwohl ziemlich schnell ... –

Verwandte Themen