https://habr.com/post/311112/ - прочитайте вот эту статейку, тут очень подробно описаны нововведения в C# в 7-й версии. Я же буду брать инфу именно оттуда.
Итак, что нового появилось в C# 7:
1. Out.
Хоть они и появились уже давненько, но до сих пор использовать их было далеко не так просто как хотелось бы. Перед тем как вызвать метод с out аргументами, необходимо объявить переменные, которые будут переданы в этот метод. Так как обычно значения этим переменным во время объявления не присваиваются (что логично — они все равно будут перезаписаны методом), ключевое слово var использовать не получится. Надо объявлять переменные с указанием их типа.
В C# 7 добавлены out переменные, которые позволяют объявить переменные сразу в вызове метода. Область видимости для таких переменных является внешний блок, именно поэтому можно их использовать в следующем за вызовом метода выражении.
2. Сопоставление с шаблоном.
В седьмой версии C# появляется понятие шаблона (pattern), который в общем случае представляет собой синтаксическую конструкцию, позволяющую проверить соответствие переменной определенному шаблону и извлечь из нее информацию, если такое соответствие имеется.
3. Шаблоны с оператором is.
4. Шаблоны и выражение switch.
- Варианты использования switch были расширены, теперь можно:
- Использовать любые типы (не только примитивные).
- Использовать шаблоны в выражениях case.
- Добавлять дополнительные условия к выражениям case (используя ключевое слово when).
5. Кортежи.
Теперь код, приведённый ниже, доступен:
(string, string, string) LookupName(long id) // возвращаемый тип - кортеж
{
... // инициализируем данные
return (first, middle, last); // литерал кортежа
}
6. Распаковка кортежей.
Теперь код, приведённый ниже, доступен:
(string first, string middle, string last) = LookupName(id1); // deconstructing declaration
WriteLine($"найдены {first} {last}.");
7. Локальные функции.
Теперь локальную функцию можно объявить внутри метода, в котором она будет использоваться.
8. Улучшения литералов.
Теперь можно разделять литералы знаком "_". Очень полезно, когда литералом является большое число, которое теперь можно разделить, для лучшего понимания.
9. Локальные переменные и возвращаемые значения по ссылке.
Теперь будет удобно передавать ссылки на определенные места в больших структурах данных. Например, в игре информация содержится в большом заранее выделенном массиве структур (чтобы избежать пауз на сбор мусора). Теперь методы могут вернуть ссылку на одну из таких структур, с помощью которой вызывающий код может читать и изменять эту структуру.
И многое другое.
Наверное покупать для этого целую книгу я бы не стал, но вот почитать про нововведения всё равно стоит.