C# 6.0: Null-conditional operators ?. [4/10]

Asi nejočekávanější a nejžádanější nová konstrukce C# 6.0 spočívá ve zkráceném zápisu testů na null. Nové null-conditional operátory lze zkráceně popsat jako „pokud před otazníkem není null, pokračuj za otazníkem, jinak null“:

int? length = customers?.Length; // null, pokud customers je null
Customer first = customers?[0]; // null, pokud customers je null

Velmi častá pak bude kombinace s ?? operátorem (coallesce):

int length = customers?.Length ?? 0; // 0, pokud customers je null

Vyhodnocení je samozřejmě zkrácené, pokud je před otazníkem null, pokračování za otazníkem se vyhodnocuje/spouští, pouze pokud nejde o null. Pokud potřebujeme testů více, musíme operátor použít vícekrát:

int? first = customers?[0].Orders?.Count();

Hezky lze chování operátoru (při null se část za otazníkem neprovádí) využít například pro volání delegátů/událostí. Nepoužívá se zde syntaxe, kde by za otazníkem následovaly přímo závorky volání metody, ale jde se přes metodu Invoke():

PropertyChanged?.Invoke(this, args);

Lze samozřejmě dále kombinovat a dostat se na konstrukce typu

if (predicate?.Invoke(e) ?? false) { … }

Série článků o novinkách v C# 6.0:

  1. Auto-property initializers a getter-only (read-only) auto-properties
  2. Expression-bodied function members
  3. Using static
  4. Null-conditional operators (?., ?[], …)
  5. String inerpolation – zkrácený String.Format()
  6. nameof() expressions
  7. Index initializers – přehlednější inicializace slovníků
  8. Exception filters, await v catch/finally blocích
  9. Konstruktor struct bez parametrů
  10. Ostatní (extension-Add v initializers, overload resolution)

9 thoughts on “C# 6.0: Null-conditional operators ?. [4/10]

  1. Pingback: C# 6.0: Using static [3/10] | HAVIT Knowledge Base

  2. Pingback: C# 6.0: Expression-bodied function members [2/10] | HAVIT Knowledge Base

  3. Pingback: C# 6.0: Auto-property initializers a getter-only (read-only) auto-properties [1/10] | HAVIT Knowledge Base

  4. Pingback: C# 6.0: String interpolation – zkrácený String.Format() [5/10] | HAVIT Knowledge Base

  5. Pingback: C# 6.0: nameof() expressions [6/10] | HAVIT Knowledge Base

  6. Pingback: C# 6.0: Index initializers – přehlednější inicializace slovníků [7/10] | HAVIT Knowledge Base

  7. Pingback: C# 6.0: Exception filters, await v catch/finally bloku | HAVIT Knowledge Base

  8. Pingback: C# 6.0: Konstruktor struct bez parametrů | HAVIT Knowledge Base

  9. Pingback: C# 6.0: Ostatní (extension-Add v initializers, overload resolution) [10/10] | HAVIT Knowledge Base

Napsat komentář

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Log Out / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Log Out / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Log Out / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Log Out / Změnit )

Připojování k %s