10 полезных фич в C# | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Python Developer. Professional
-3%
Разработчик на Spring Framework
-5%
iOS Developer. Professional
-8%
Golang Developer. Professional
-6%
Базы данных
-12%
Agile Project Manager
-5%
Android Developer. Professional
-11%
Microservice Architecture
-5%
C++ Developer. Professional
-5%
Highload Architect
-6%
JavaScript Developer. Basic
-8%
Kotlin Backend Developer
-9%
C# Developer. Professional
-9%
Team Lead
-6%
Алгоритмы и структуры данных Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер NoSQL Супер-практикум по использованию и настройке GIT Symfony Framework iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
DevOps практики и инструменты
-12%
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Экcпресс-курс «ELK»
-10%
Инфраструктурная платформа на основе Kubernetes
-6%
Administrator Linux.Basic
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Дизайн сетей ЦОД
-13%
PostgreSQL
-8%
Разработчик программных роботов (RPA) на базе UiPath и PIX Reverse-Engineering. Professional Внедрение и работа в DevSecOps Administrator Linux. Advanced Infrastructure as a code in Ansible Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

10 полезных фич в C#

CSharp_Deep_3.10-5020-ac1ae9.png

Знание этих приёмов позволит вам избежать многих ошибок. Вы не только станете писать более понятный код, но и сэкономите своё время.

1. async/await

Паттерны async/await позволят разблокировать UI/текущий поток при выполнении блочных операторов. Также они позволят вашему коду работать даже в том случае, если что-то будет блокировать его выполнение (к примеру, web-запрос).

Подробности использования этих паттернов вы найдёте здесь.

2. Инициализаторы объектов/коллекций/массивов

Обратите внимание на следующий участок кода:

//Обычный демо-класс
public class Employee {
    public string Name {get; set;}
    public DateTime StartDate {get; set;}
}

//Создайте employlee, применяя инициализатор
Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()};

Этот пример будет вам полезен в юнит-тестировании. В других случаях желательно применять конструкторы.

Подробности.

3. Лямбды, делегаты, предикаты и замыкания

Просто незаменимы во множестве ситуаций, к примеру, при использовании LINQ. Но вы должны понимать, как и когда их использовать.

Подробности.

4. ?? (оператор объединения с NULL)

x ?? y — возвращает x, когда значение отличается от null; в обратном случае возвращает y.

//Может быть null
var someValue = service.GetValue();
var defaultValue = 23

//result будет 23, если someValue - null
var result = someValue ?? defaultValue;

Операторов ?? может быть несколько:

string anybody = parm1 ?? localDefault ?? globalDefault;

Оператор ?? также подходит для перевода типов null в не null:

var totalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);

Подробности.

5. $”{x}” (интерполяция строк) — C# 6

Данная фича в C# 6 позволит вам собирать строки элегантно и эффективно:

//Ранее
var someString = String.Format("Some data: {0}, some more data: {1}", someVariable, someOtherVariable);

//Сейчас
var someString = $"Some data: {someVariable}, some more data: {someOtherVariable}";

6. ?.(определяет null) — C# 6

x?.y — доступ к членам, который определяется условием null. Значение null возвращается, если левый операнд имеет значение null.

//Null, если customer, или customer.profile, или customer.profile.age — null
var currentAge = customer?.profile?.age;

А значит, больше никаких NullReferenceExceptions!

Подробности.

7. Выражение nameof — C# 6

Некоторые скажут, что выражение nameof не очень-то полезно, однако это не так. В случае применения автоматических инструментов рефакторинга (к примеру, ReSharper) нам может потребоваться обращение к аргументу метода по его имени:

public void PrintUserName(User currentUser)
{
    //Инструмент рефакторинга может пропустить текстовое обращение к текущему пользователю, если его переименовать
    if(currentUser == null)
        _logger.Error("Argument currentUser is not provided");

    //...
}

Вот, как это должно быть:

public void PrintUserName(User currentUser)
{
    //Инструмент рефакторинга уже ничего не пропустит
    if(currentUser == null)
        _logger.Error($"Argument {nameof(currentUser)} is not provided");

    //...
}

Подробности.

8. Инициализаторы свойств (property) — C# 6

Позволяют задавать для свойств начальные значения:

public class User
{ 
    public Guid Id { get; } = Guid.NewGuid();
    // ...
}

Их польза в том, что вы не сможете объявить setter, сделав тем самым свойства неизменяемыми. Кроме того, инициализаторы свойств прекрасно работают в связке с синтаксисом первичного конструктора в C# 6.

9. Операторы is и as

Is — совместимость типов. Оператор возвращает значение true, когда вычисленный левый операнд можно привести к типу, указанному в правом операнде (статический тип).

if (Person is Adult)
{
    //код
}

As — преобразование типов. Оператор возвращает левый операнд, который приведён к типу, заданному правым операндом (статический тип). Однако as возвращает null там, где (T)x вызывает исключение.

SomeType y = x as SomeType;
if (y != null)
{
    //код
}

10. Ключевое слово yield

Мы уже писали о ключевом слове yield. Оно обеспечивает заполнение интерфейса IEnumerable объектами (items). Давайте посмотрим на код, который вернёт все степени двойки от 2 до 2 в степени 8 (2, 4, 8, 16, 32, 128, 256):

public static IEnumerable Power(int number, int exponent)
{
    int result = 1;
    for (int i = 0; i < exponent; i++)
    {
      result = result * number;
      yield return result;
    }
}

Собственно говоря, в умелых руках yield — мощная штука. Вы сможете легко сгенерировать последовательность объектов, то есть системе не потребуется перечислять всю коллекцию целиком, так как это может быть выполнено по требованию.

При написании статьи использовались материалы How Not To Code.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
1 комментарий
0

в 2019 можно было бы и что-то поновее накопать.

Для комментирования необходимо авторизоваться
🔥 Только до 28.02
Успейте приобрести курсы февраля на выгодных условиях! Подробности в чате.