[Из песочницы] Что нового в C# 6.0?

imageMicrosoft выпустила предварительную версию Visual studio 2015 и .Net 4.6 для разработчиков. В новом C# 6.0 несколько новых возможностей, которые могут облегчить кодинг.

В этой статье рассмотрены новые возможности языка C# 6.0. Скачать новую VS можно по ссылке: Microsoft Visual Studio Ultimate 2015 Preview

Инициализация свойств со значениямиВ C# 6.0 мы можем инициализировать свойства со значениями, написав справа от них их значение. Это поможет избежать ошибки с null и пустыми значениями свойства.Раньше: public int Id { get; set; } public string FirstName { get; set; } Теперь: public int Id { get; set; } = 1001; public string FirstName { get; set; } = «Srinivas»; Конкатенация строк Каждый день нам приходится сталкиваться с конкатенацией строк. Кто-то в основном использует оператор »+», кто-то — метод string.Format (). Мне лично по душе string.Format (). Но проблемы с ним всем известны: при слишком большом количестве параметров тяжело понимать, что означают каждое число — {1}, {2}, {3}. В C# 6.0 придумали новую возможность, которая должна объединить достоинства обоих методов.Раньше: name = string.Format («Employee name is {0}, located at {1}», emp.FirstName, emp.Location); Теперь: name = $«Employee name is {emp.FirstName}, located at {emp.Location}»; Так же можно использовать условия: name = $«Employee name is {emp.FirstName}, located at {emp.Location}. Age of employee is {(emp.Age > 0) ? emp.Age.ToString () : «N/A»}»; Использование лямбда-выражений В C# 6.0 свойства и методы можно определять через лямбда-выражения. Это сильно уменьшает количество кода.Раньше: public string[] GetCountryList () { return new string[] { «Russia», «USA», «UK» }; } Теперь: public string[] GetCountryList () => new string[] { «Russia», «USA», «UK» }; Импорт статических классов Все статические члены класса могут быть определены с помощью другого статического класса. Но нам приходится постоянно повторять имя данного статического класса. При большом количестве свойств приходится много раз повторять одно и то же.В C# 6.0 появилась возможность импортировать с помощью ключевого слова using статические классы. Рассмотрим все на примере использования библиотеки Math: Раньше double powerValue = Math.Pow (2, 3); double roundedValue = Math.Round (10.6); Теперь: using System.Math; double powerValue = Pow (2, 3); double roundedValue = Round (10.6); Это можно использовать не только внутри класса, но и при выполнении метода: Раньше: var employees = listEmployees.Where (i => i.Location == «Bangalore»); Теперь: using System.Linq.Enumerable; var employees = Where (listEmployees, i => i.Location == «Bangalore»); Null-условный оператор C# 6.0 вводит новый так называемый Null-условный оператор (?.), который будет работать поверх условного оператора (?:). Он призван облегчить проверку на NULL значения.Он возвращает null значения, если объект класса, к которому применен оператор, равен null: var emp = new Employee () { Id = 1, Age = 30, Location = «Bangalore», Department = new Department () { Id = 1, Name = «IT» } }; Раньше: string location = emp == null? null: emp.Location; string departmentName = emp == null? null: emp.Department == null? null: emp.Department.Name; Теперь: string location = emp?.Location; string departmentName = emp?.Department?.Name; nameof оператор В C# 6.0 оператор nameof будет использоваться, чтобы избежать появления в коде строковых литералов свойств. Этот оператор возвращает строковый литерал передаваемого в него элемента. В качестве параметра можно передать любой член класса или сам класс. var emp = new Employee () { Id = 1, Age = 30, Location = «Moscow», Department = new Department () { Id = 1, Name = «IT» } }; Response.Write (emp.Location); //result: Moscow Response.Write (nameof (Employee.Location)); //result: Location Await в catch и finally блоках До C# 6.0 нельзя было использовать в блоках catch и final оператор await. Сейчас такая возможность появилась. Ее можно будет использовать для освобождения ресурсов или для ведения логов ошибок. public async Task StartAnalyzingData () { try { // код } catch { await LogExceptionDetailsAsync (); } finally { await CloseResourcesAsync (); } } Фильтры исключений Фильтры исключений были в CLR, и они доступны в VB, но их не было в C#. Теперь данная возможность появилась, и можно накладывать дополнительный фильтр на исключения: try { //Вызываем исключение } catch (ArgumentNullException ex) if (ex.Source == «EmployeeCreation») { //Нотификация об ошибки } catch (InvalidOperationException ex) if (ex.InnerException!= null) { //Нотификация об ошибки } catch (Exception ex) if (ex.InnerException!= null) { //Сохраняем данные в лог } Инициализация Dictionary В C# 6.0 добавлена возможность инициализации Dictionary по ключу значения. Это должно упростить инициализацию словарей.Например, для JSON объектов: var country = new Dictionary { [0] = «Russia», [1] = «USA», [2] = «UK», [3] = «Japan» }; В C# 6.0 много синтаксических изменений и новых возможностей. Также Microsoft улучшает новый компилятор в плане производительности.P.S. Новые возможности описаны на текущую версию компилятора, к выходу финальной версии синтаксис может измениться.

© Habrahabr.ru