Що нового в C# 6.0?

image

Microsoft випустила попередню версію 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.Перечіслімого;
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<int, string>
{
[0] = "Russia",
[1] = "USA",
[2] = "UK",
[3] = "Japan"
};

В C# 6.0 багато синтаксичних змін і нових можливостей. Також Microsoft покращує новий компілятор в плані продуктивності.

P. S. Нові можливості описані на поточну версію компілятора, до виходу фінальної версії синтаксис може змінитися.

Джерело: Хабрахабр
  • avatar
  • 0

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.