7. Mitä on LINQ:nsisällä? public static class HakuExtension{ public static IEnumerable<T> Missä<T>( this IEnumerable<T> lista, Func<T, bool> ehto){ foreach(var i in lista){ if (ehto(i)) yield return i; } } }
8. Imperatiivinen vs. deklaratiivinen var result = new List<int>(); foreach(var i in lista){ if(i % 2 == 0){ result.Add(i); } } var result = from i in lista where i % 2 == 0 select i;
Notes de l'éditeur
Func<…> on “funktio tietotyyppinä”Nämä koodilohkot ovat sama asia.Ensimmäiset tyyppiparametrit ovat parametreja. Viimeisenä tyyppiparametrina on paluuarvoTyyppimäärittelyissä jo tiedetään tyyppi…
List<T> sijaan käytä kantaluokkaa IEnumerable<T>- “Lueteltava”- Se on kantaluokka listoille (ja LINQ:lle) Siinä ei ole .RemoveAt(…) metodia, joten muut eivät pääse puuttumaan väliin
UsingSystem.LinqSuodatetaan turhat
Debugatessa huomaa, miten suoritus tapahtuu! Älä teeif(list.Count() == 0) vaan if(!list.Any()) niin ei evaluoida koko listaa läpi
Deklaratiivisuus on parempi: Korkeamman tason abstraktio Määritellään mitä kone tekee, ei miten kone tekeeSQL-muotoinen syntaksi ei ole se pointti, vaan funktionaalisuus!SQL-muotoinen syntaksi on vain eri tapa ilmaista .Where(i=>i%2==0);