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