C# 6.0: Exception filters, await v catch/finally bloku [8/10]

C# 6.0 dohání chybějící drobnosti kolem výjimek

Exception filters

Catch-blok je vyvolán, pouze pokud je vedle typu výjimky splněna i podmínka:

try
{
    … 
}
catch (MyException ex) if (condition) // už v podmínce se lze odkázat na ex
{
    …
}

Znásilnit tuto konstrukci lze i pro neinvazivní logování výjimek, sám bych s tím však byl opatrný.

private static bool Log(Exception e) { /* log it */ ; return false; }
…
try { … } catch (Exception e) if (Log(e)) {}

Await v catch a finally blocích

C# 5.0 nepodporoval await v catch a finally blocích, protože se Microsoft domníval, že to není potřebné a implementace by byla neúměrně komplikovaná. Nyní dlužnou funkčnost doplnili:

Resource res = null;
try
{
    res = await Resource.OpenAsync(…);
}
catch(ResourceException e)
{
    await Resource.LogAsync(res, e);
}
finally
{
    if (res != null) await res.CloseAsync();
}

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: Exception filters, await v catch/finally bloku [8/10]

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

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

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

  4. Pingback: C# 6.0: Null-conditional operators ?. [4/10] | HAVIT Knowledge Base

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

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

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

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

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

Zanechat odpověď

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

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s