Что нового в C# 7.0 ?

Недавно купил книгу по C# 6.0 , а потом узнал, что уже давненько вышел C# 7.0, и даже больше... Вопрос больше относится к тому, что стоит ли покупать новую книгу по 7.0, или впринципе 6.0 от 7.0 и можно не париться?

Чем предметно C# 6 отличается от C# 7?

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. Локальные переменные и возвращаемые значения по ссылке.

Теперь будет удобно передавать ссылки на определенные места в больших структурах данных. Например, в игре информация содержится в большом заранее выделенном массиве структур (чтобы избежать пауз на сбор мусора). Теперь методы могут вернуть ссылку на одну из таких структур, с помощью которой вызывающий код может читать и изменять эту структуру.

И многое другое.

Наверное покупать для этого целую книгу я бы не стал, но вот почитать про нововведения всё равно стоит.