Consider this method:
public IEnumerable<T> GetList(int Count)
{
foreach (var X in Y)
{
// do a lot of expensive stuff here (e.g. traverse a large HTML document)
// when we reach "Count" then exit out of the foreach loop
}
}
and I'd call it like so: Class.GetList(10);
which would return 10 items - this is fine.
I'd like to use IEnumerable
's Take()
method by using Class.GetList().Take(10)
instead and I want the foreach loop to be able to somehow grab the number I passed into Take()
- is this possible? It seems a more cleaner approach as it's ultimately less expensive as I can grab a full list with Class.GetList()
once and then use IEnumerable
's methods to grab x items afterwards.
Thanks guys!
You can do this by implementing your method as an iterator block:
public IEnumerable<T> GetList()
{
foreach (var X in Y)
{
// do something
yield return something;
}
}
When you call Take(10)
only the first 10 elements will be yielded - the rest of the method won't be run.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With