What do you think of my own implementation of the extension method SelectMany
?
Motivating criticism is always welcome.
public static IEnumerable<TResult> MySelectMany<T, TResult>(this IEnumerable<T> source, Func<T, IEnumerable<TResult>> selector)
{
var theList = new List<TResult>();
foreach (T item in source)
{
foreach (TResult inneritem in selector(item))
{
theList.Add(inneritem);
}
}
return theList as IEnumerable<TResult>;
}
1 Answer 1
The as
cast in the return statement is entirely redundant, it doesn’t serve a purpose.
Furthermore, The problem with this implementation is that it’s not lazy. You should use a yield
generator instead.
public static IEnumerable<TResult> MySelectMany<T, TResult>(this IEnumerable<T> source, Func<T, IEnumerable<TResult>> selector)
{
foreach (T item in source)
foreach (TResult inneritem in selector(item))
yield return inneritem;
}
If C# already had a yield from
statement, this would be even shorter since you wouldn’t need to iterate the inner items explicitly.
Explore related questions
See similar questions with these tags.
SelectMany()
. \$\endgroup\$