Posts

Posts uit november, 2016 tonen

Linq Zip functie

Met zip functie van Linq kunnen twee lijsten 'geritst' worden. Deze functie werkt als een soort ritsssluiting. Voorbeeld: var letters= new string[] { "A", "B", "C", "D", "E" }; var numbers= new int[] { 1, 2, 3 }; var q = letters.Zip(numbers, (l, n) => l + n.ToString()); foreach (var s in q) Console.WriteLine(s); Als de ene lijst meer items bevat dan de andere lijst, dan wordt uitgegaan van de lijst met de minste items, zoals het voorbeeld laat zien.

Linq Aggregate functie

Met de aggregate linq method wordt een lijst eenmalig van begin tot eind doorlopen. Bij elke iteratie kan een actie worden uitgevoerd en het resultaat van deze actie wordt meegenomen naar de volgende iteratie. Voorbeeld: var nums = new[]{1,2,3,4}; var sum = nums.Aggregate( (a,b) => a + b); Console.WriteLine(sum); // output: 10 (1+2+3+4) Deze code wordt als volgt uitgevoerd: In de eerste iteratie hebben de parameters a en b de waarde 1 en 2. In de body van de aggregate worden deze waarden bij elkaar opgeteld en het resultaat vormt de input voor de volgende iteratie. In de tweede iteratie zijn de waarden voor a en b dan ook 3 en 3. Deze waarden worden weer bij elkaar opgeteld en het resultaat is weer de waarde voor a: 6 en b krijgt de waarde uit de lijst: 4. Dus het resultaat is dan ook 6 + 4 = 10. Een ander voorbeeld is gebruik te maken van een strings: var chars = new []{"a","b","c", "d"}; var csv = chars.Aggregate( (a,b) => a + &

OO Design reminders

Onderstaand reminders voor OO design: Lijsten Komt het regelmatig voor dat er acties moeten worden uitgevoerd op lijsten, maar hiervoor dan een aparte class aan, bijv. Persons. Deze class erft dan van IEnumerable en heeft dan als extra's de methodes die vaak gebruikt worden. Option type Soms moet een actie op een object worden uitgevoerd, maar alleen als dat object bestaat. Om een null check uit te sluiten kan je een nieuwe class maken: Option . Vervolgens implementeert deze class IEnumerable . Dit is een manier om aan te geven dat er "niets" is zonder te hoeven checken op null. De aanroepende code kan dan altijd bijv. ForEach(o => o.DoSomething()) aanroepen zonder daarbij te hoeven checken op null. Voorbeeld implementatie van Option class: public class Option<T> : IEnumerable<T> { private readonly T[] data; private Option(T[] data) { this.data = data; } public static Option<T> Create(T element) { ret