Wraz z Visual Studio 2015 pojawiła się nowa wersja języka C#, a wraz z nim kilka udogodnień. Dotyczą one tylko uproszczenia składni, nie wprowadzono nowych funkcjonalności jak w poprzednich wersjach (patrz C# 5.0 – async, await). Poniżej opiszę krótko wszystkie nowe udogodnienia, które pozostają nam do dyspozycji na ten moment
1. Initializers for auto-properties
Od teraz inicjalizacja właściwości może wyglądać tak:
1 2 |
public string X { get; set; } = "DefaultValue"; public DateTime Date { get; set; } = DateTime.Now; |
2. Using static members
Możliwość użycia dyrektywy using dla składowych statycznych
1 2 3 4 5 6 7 8 9 10 11 12 |
using static System.Console; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { WriteLine("Hello static members!"); } } } |
3. Dictionary initializer
Nowy format zapisu kolekcji słownikowej. Przyznajcie, że teraz jest o wiele czytelniej
1 2 3 4 5 6 |
var dictionary = new Dictionary<string, int>() { ["keyA"] = 1, ["keyB"] = 2, ["keyC"] = 3 }; |
4. Property expressions
Nasze właściwości możemy wzbogacić lambdą.
1 2 |
public string Year => Date.Year.ToString(); public double Pow => Math.Pow(2, 10); |
5. Method expressions
Podobnie ma się to do metod.
1 |
public double GetPower(int x, int y) => Math.Pow(x, y); |
6. Null-conditional operator
Przykładowo mamy metodę GetName, która przyjmuje obiekt typu Test. W ciele metody chcemy odczytać właściwość Name.
1 2 3 4 5 6 7 8 9 10 |
public void GetName(Test test) { string name = String.Empty; //C# 5.0 if (test != null) name = test.Name; //C# 6.0 name = test?.Name; //... |
7. Await w blokach catch i finally
1 2 3 4 5 6 7 8 9 10 11 12 |
try { //do sth } catch (ApplicationException exc) { await res.LogSth(exc); } finally { await res.Close(); } |
8. Exception filters
C# 6.0 umożliwia filtrowanie wyjątków, aby tego dokonać należy wykorzystać słowo kluczowe when
1 2 3 4 |
catch (CustomException exc) when(exc.Message == "") { //await res.LogSth(exc); } |
9. Nameof expressions
Umożliwia pobranie nazwy np. w tym przypadku właściwości.
1 2 3 4 |
public async void GetName(Test test) { string nameOfProp = nameof(test.Name); } |
Nie wymieniłem tutaj Primary constructors, ponieważ ten feature został jednak wycięty z C# 6.0. Może zostanie dodany w kolejnej wersji. Mam nadzieję, że niczego nie pominąłem z nowości w C# 6.0. Jeżeli jednak coś mi umknęło to piszcie proszę w komentarzach, wtedy postaram się zaktualizować listę