Upload
tuomas-hietanen
View
559
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
LINQ in practice
”In theory there is no difference between theory and practice. But in practice there
is”. Except in mathematics…
Func<TIn1, TIn2, TOut>
public int PlusFive(int i){ return i+5;}
Func<int, int> PlusFive = delegate(int i) { return i + 5; };
Func<int, int> PlusFive = i => i + 5;
IEnumerable<T>
” Infinite loop”
public static IEnumerable<int> NaturalNumbers() { int i=0; while(true){ yield return i++; } }
yield return• Return and continue
Filtered
public static IEnumerable<int> Odds() { return NaturalNumbers().Where(i=>i%2==1);}
It works!
static void Main(string[] args){ var nums = Odds().Take(5); //var executed = nums.ToList(); foreach(var i in nums) Console.WriteLine(i);}
IEnumerable<T> is lazy
What is inside LINQ?
Extension-methods, e.g.:
public static class FetchExtension{ public static IEnumerable<T> MyWhere<T>(
this IEnumerable<T> list, Func<T, bool> cond){
foreach(var i in list){ if (cond(i)) yield return i; } }}
Imperative vs. declarative
How Whatvar result = new List<int>();foreach(var i in list){ if(i % 2 == 0){ result.Add(i); }}
var result = from i in list where i % 2 == 0 select i;