- Published on
 
LINQ in .NET - Things I learned #1
- Authors
 
- Name
 - Tylah Kapa
 - @jadekapa
 
I really enjoyed the last video, so predictably my reaction is the same this time around.

This one will be a part series as well, strap in for the ride!
What do I think LINQ is?
In the same vein as Async/Await, LINQ is something that I've used a lot but couldn't really conceive of how it works.
Ostensibly it's just a list of helper functions. Things like First Select or Where I'd imagine take a delegate and apply it to a list. Simple, no? I'm anticipating that I might find out that it's a bit more complicated than that.
5 things that I learned while watching this video
- It's still so interesting how iterators work...
 
That this is a valid function still kind of blows my mind... Luckily we get an explanation.
foreach (int i in GetNumbers())
{
    Console.WriteLine(i);
}
static IEnumerable<int> GetNumbers()
{
    yield return 1;
    yield return 2;
    yield return 3;
}
After compilation, we get something similar to
IEnumerable<int> e = GetNumbers();
using IEnumerator<int> enumerator = e.GetEnumerator();
try {
    while (enumerator.MoveNext())
    {
        int i = enumerator.Current;
        Console.WriteLine(i);
    }
}
finally {
    enumerator?.Dispose();
}
static IEnumerable<int> GetNumbers()
{
    yield return 1;
    yield return 2;
    yield return 3;
}
So
GetNumbers()can somehow store it's state between calls forMoveNext()Select()is one of the most basic APIs we use.- It's quite literally a 
foreachloop thatyield returns the result of the delegate passed to it. 
- It's quite literally a 
 Iterators do not execute until
MoveNext()is called.- So how do we get exceptions to throw e.g. 
ArgumentNullException? - A 
staticiterator method is implemented within the function that does theforeachloop. 
- So how do we get exceptions to throw e.g. 
 sealedclasses provide a performance benefit. Even though Microsoft doesn't recommend usingsealed.- They also have a tool the identifies classes that aren't inherited, and can benefit from that performance increase.
 
Where I stopped in the video
I got a little bit carried away. Only 25 minutes in and there's already a ton of information here.
So far:
- Stephen has implemented 
SelectCompiler() - Stephen has started to implement his own 
SelectManualEnumerable<TSource, TResult>to show us how it's implemented.