5. Implicitně typovaná pole

Jak již bylo řečeno, typ pole uváděný v deklaraci se musí shodovat s datovým typem jednotlivých prvků pole. Další možností je nechat kompilátor si odvodit datový typ prvků pole ze seznamu inicializátoru uvedených ve složené závorce. Obecná syntaxe takového zápisu pro jednorozměrné pole:

var identifikátorPole = new [ ] {seznamInicializátorů}

kde:

  • var - klíčové slovo identifikující, že jde o typ implicitně typovaného pole
  • identifikátorPole - definuje název jednorozměrného pole
  • new - klíčové slovo vytvářející instanci pole
  • seznamInicializátorů - představuje seznam jednotlivých hodnot prvků pole


Ilustrativní příklad ImplicitneTypovanePoleJmen
Program ImplicitneTypovanePoleJmen
  • Popis: Vytvoření jednorozměrného implicitně typovaného pole s datovým typem string
  • Zadání: Zkuste deklarovat implicitně typované pole obsahující jména: "Petr", "Jan", "Pavel", "Zdeněk"
  • Řešení: Bude postupně probráno v následujícím textu


V následujícím kódu vidíme, že datový typ uváděný v předchozích příkladech byl nahrazen klíčovým slovem var, které uvozuje identifikátor proměnné – viz Kód 1. Dále byly v zápisu také vynechány závorky uvozující název pole. Datový typ si kompilátor odvodil ze seznamu jednotlivých inicializátoru – textových řetězců (tedy typ string) uzavřených ve složené závorce, které představují jednotlivé prvky pole. 

//Vytvoření instance implicitně typovaného pole včetně jeho inicializace
var jmena = new[] { "Petr", "Jan", "Pavel", "Zdeněk" };

Kód 1: Příklad vytvoření instance jednorozměrného implicitně typovaného pole

Je důležité zajistit, aby všechny inicializátory byly stejného datového typu, jinak kompilátor nahlásí chybu: Nebyl nalezen optimální typ pro implicitně typované pole. Tento přístup se používá zejména u objektů anonymní třídy, kde jsou inicializovány jednotlivé datové složky takových instancí.


Ilustrativní příklad ImplicitneTypovanePoleLidi
Program ImplicitneTypovanePoleLidi
  • Popis: Vytvoření jednorozměrného implicitně typovaného pole s instancemi anonymní třídy
  • Zadání: Zkuste deklarovat implicitně typované pole nazvané lide. Jednotlivé prvky pole jsou instancemi anonymní třídy. Třída obsahuje datové složky:
    • Jmeno – jméno člověka (datový typ string). Jednotlivá jména: "Petr", "Jan", "Pavel", "Zdeněk"
    • Vek – věk člověka (datový typ int). Věk lidí: 39, 67, 38, 45
  • Řešení: Bude postupně probráno v následujícím textu


V následujícím kódu vidíme, že deklarace implicitně typovaného pole je stejná jako v předchozím příkladu – viz Kód 2. Rozdíl je ve výrazu napravo od přiřazení, kde konstruktor pole využívá další konstruktory anonymní třídy pro generování instancí této třídy. U konstruktoru každé instance pak stačí do složených závorek (značící identifikátory) doplnit hodnoty jednotlivých datových složek.

//Vytvoření instance implicitně typovaného pole s instancemi anonymní třídy
var lide = new[] { new { Jmeno = "Petr", Vek = 39 },
                    new { Jmeno = "Jan", Vek = 67 },
                    new { Jmeno = "Pavel", Vek = 38 },
                    new { Jmeno = "Zdeněk", Vek = 45 } };

Kód 2: Příklad vytvoření instance jednorozměrného implicitně typovaného pole obsahující instance anonymní třídy