Základy programování 4 - C# - 8. cvičení Radek Janoštík Univerzita Palackého v Olomouci 3.4.2017 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 1 / 10
Reakce na úkoly (1/2) Vytváření nových popisků uzlu Použití using bez try try { using (var reader = new StreamReader(path)) {... catch (Exception e) { Spoléhání na pořadí prvků v XML Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 2 / 10
Reakce na úkoly (2/2) Použití z-indexu Canvas.SetZIndex(line, 3); Malování prvků umožněno jen v jednom směru Zbytečné operace v těle delegátů el.mousedown += delegate (object sender, MouseButtonEventArgs e) { TextBlock txtblck = new TextBlock(); int index = findpoint(); string s = ""; foreach (var item in loadedset.elements) { s = item.attributes.tostring(); if (item.id == index) { txtblck.text = s; canvas.children.add(txtblck); Canvas.SetLeft(txtBlck, e.getposition(this).x); Canvas.SetTop(txtBlck, e.getposition(this).y); txtbxon = true; break; ; Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 3 / 10
Lambda výrazy = anonymní funkce pro vytváření delegátů či výrazových stromů delegate int somedelegate(int blah); static void Main(string[] args) { somedelegate del = (i) => i + 5; Func <int, int> fce = ((int i) => i + 2); Console.WriteLine(fce.Invoke(5)); Mohou být předány jako parametr metody Mohou být vráceny metodou Při přiřazení však staticky typované Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 4 / 10
LINQ Zkratka pro Language INtegrated Query Jednotný přístup k datům Typová kontrola, našeptávače Přístup např. ke: Kolekcím (vše co splňuje IEnumerable) XML Databázovým objektům Webovým službám Rozšiřitelné Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 5 / 10
Syntaxe Textová ukecaná syntaxe: int[] numbers = { 1, 2, 3, 4, 5, 6, 7 ; IEnumerable<int> bignumbers = from num in numbers where num > 5 select num; Podobná přirozenému jazyku, může být matoucí Fluent API (preferovaná): int[] numbers = { 1, 2, 3, 4, 5, 6, 7 ; IEnumerable<int> bignumbers2 = numbers.where(p => p > 5); Přehlednější, programátorštější Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 6 / 10
Dotazovací operace (1/3) Restrikce int[] numbers = { 1, 2, 3, 4, 5, 6, 7 ; IEnumerable<int> bignumbers2 = numbers.where(p => p > 5); Selekce public class Person { public string Name { get; set; public string Surname { get; set; public int Age { get; set; public string Address { get; set; List<Person> persons = new List<Person>(); var names= persons.select(p => new { p.name, p.surname ); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 7 / 10
Dotazovací operace (2/3) Řazení persons.orderby(p => p.age).thenby(p => p.name); persons.orderbydescending(p => p.surname).thenby(p => p.name); Omezení počtu persons.orderby(p => p.age).thenby(p => p.name).take(10); Přeskočení prvních n persons.orderby(p => p.age).thenby(p => p.name).skip(20).take(10); Poslední s vlastností persons.last(p => p.age == 30); persons.lastordefault(p=>p.name=="pepa"); Analogicky First, FirstOrDefault Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 8 / 10
Dotazovací operace (3/3) Unikátnost persons.distinct(); Obsahuje nějaký prvek s vlastností persons.any(p=>p.name="karel"); Počet prvků s vlastností persons.count(p => p.age == 30); persons.where(p=>p.age==30).count(); Množinové operace Průnik persons.intersect(anotherpersons); Sjednocení persons.union(anotherpersons); Rozdíl persons.except(anotherpersons); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 9 / 10
Úkol Stáhnout soubor Database.cs z mých stránek a includovat do projektu Nejprve po staru abecedně vzestupně setřídit osoby dle příjmení (Mergesort s comparatorem na string) a vypsat 10 unikátních dvojic jmen a příjmení, které jsou 5. - 15. v pořadí Udělat totéž pomocí LINQ Pomocí LINQ vypsat první osobu, která je v 5. ročníku či výše Pomocí LINQ zjistit počet lidí s OborKomb rovnou MI Pomocí LINQ zjistit, zda existuje osoba se jménem Zdeněk Vše vypsat do konzole v pořadí úkolů Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 10 / 10