September 2008
Monthly Archive
Monthly Archive
SelectMany is a fascinating operator in LINQ to Objects. For one thing, it is not as intuitive as most other LINQ operators. MSDN says that SelectMany “projects each element of a sequence to an IEnumerable(T) and flattens the resulting sequences into one sequence.” I still remember reading this description of SelectMany for the first time, and wondering why that would that be useful.
Of course, SelectMany is not only incredibly useful, but also surprisingly powerful. In fact, a variety of LINQ operators are really just constrained versions SelectMany. Select, Concat, Where, Take, Skip, TakeWhile, SkipWhile and Distinct can all be easily rewritten using a single SelectMany.
3 comments Tuesday 23 Sep 2008 | Igor Ostrovsky | Uncategorized
I was discussing the little LINQ puzzle with Stephen Toub, and he brought up an idea which lead to another puzzle. I like this one even more than the previous one.
Why does the last line throw StackOverflowException?
IEnumerable<int> q = new int[] { 1, 2 }; q = from x in new int[] { 1, 2 } from y in q select x + y; q.ToArray();
And, how come the code sample runs just fine if you switch the order of the from clauses?
4 comments Friday 12 Sep 2008 | Igor Ostrovsky | Uncategorized
Why does the last line hang?
IEnumerable<int> empty = Enumerable.Empty<int>(); for (int i = 0; i < 40; i++) { empty = empty.Concat(empty); } int[] emptyArray = empty.ToArray();
Answer in the comments section.
For a slightly harder challenge, check out the next puzzle.
6 comments Friday 12 Sep 2008 | Igor Ostrovsky | Uncategorized