c# - Return results from a call to Yield Return -


i find scenario return ienumerable using yield return statement, have other methods call function different parameters , directly return result.

is there performance benefit iterating through results end yield returning these opposed returning collection? i.e. if use return on resulting ienumberable rather looping through these results again , using yield return compiler know generate results they're required, or wait entire collection returned before returning results?

public class demo {     private ienumerable<int> getnumbers(int x)     {         //imagine operation more expensive demo version         //e.g. calling web service on each iteration.         (int = 0; < x; i++)         {             yield return i;         }     }     //does wait full list before returning     public ienumerable<int> getnumberswrapped()     {         return getnumbers(10);     }     //whilst allows benefits of yield return persist?     public ienumerable<int> getnumberswrappedyield()     {         foreach (int in getnumbers(10))             yield return i;     } } 

getnumberswrapped passes through original enumerable - hasn't invoked iterator @ point. end result remains deferred / lazy / spooling / whatever else.

getnumberswrappedyield adds extra layer of abstraction - now, every call movenext has ever slightly more work; not enough cause pain. deferred / lazy / spooling / whatever else - adds minor overheads. these minor overheads justified fact adding value such filtering or additional processing; not in example.

note: 1 thing getnumberswrappedyield does prevent abuse callers. example, if getnumbers was:

private ienumerable<int> getnumbers(int x) {     return myprivatesecretlist; } 

then callers of getnumberswrapped can abuse this:

ilist list = (ilist)getnumbers(4); list.clear(); list.add(123); // mwahahaahahahah 

however, callers of getnumberswrappedyield cannot this... @ least, not quite easily. could, of course, still use reflection pull iterator apart, obtain wrapped inner reference, , cast that.

this, however, not genuine concern.


Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -