Требования к версии С# 7.NET/CLR/Visual Studio

Каковы минимальные требования к платформе .NET и CLR для запуска С# 7? Кроме того, мне нужно VS 2017 для компиляции С# 7?

Ответ 1

Вам не нужно указывать .NET 4.6 и выше, это неверно. Чтобы использовать Tuples, вам нужен пакет System.ValueTuple NuGet. Прямо на https://www.nuget.org/packages/System.ValueTuple/ вы можете видеть, что он поддерживает 4.5 и выше, и фактически он поддерживает 4.0 и выше. И если вы хотите сходить с ума, если вы создаете свой собственный класс System.ValueTuple, который делает именно то, что делает этот пакет, он будет работать на .NET 3.5 и, вероятно, и старше. Для типов типа "Task-like" вам также нужен пакет NuGet, https://www.nuget.org/packages/System.Threading.Tasks.Extensions/. Этот пакет также работает с .NET 4.5 и новее в соответствии с его документацией.

Другие функции С# 7 будут работать только на .NET 2 и выше, поскольку они всего лишь синтаксический сахар. Например, я просто написал следующее в .NET 2.0, и он правильно выбрасывает:

    static void Main(string[] args)
    {
        string test = null;
        string d = test ?? throw new ApplicationException("test");
    }

Аналогично, int.TryParse("123", out int i); отлично работает в .NET 2.0.

Я не тестировал каждую функцию С# 7, но в целом, за исключением Tuples (и связанных с ними функций, таких как деконструкция), он должен работать в .NET 2.0 и выше, поскольку большинство из них - просто синтаксический сахар. При этом вам нужно VS2017 для компиляции С# 7. Я уверен, что в какой-то момент другие компиляторы будут поддерживать С# 7, но не сегодня.

Возможности Я подтвердил работу в .NET 2.0:

  • Двоичные литералы
  • Сегментаторы цифр
  • Параметры Inline out
  • Использование _ для отбрасывания параметров
  • Локальные функции
  • Соответствие шаблону на основе типа if (obj is int i) и case int i:
  • Согласование констант if (i is 2)
  • Сортировка шаблонов if (i is var j)
  • Возвращает
  • Выбросить выражения
  • Выражения, связанные с получателями и сеттерами
  • Конструкторы выражений и финализаторы

Ответ 2

Чтобы использовать полную мощность С# 7 из коробки (без ссылок на nugets и т.д.), вам нужны VS 2017 и .Net 4.7 как Target Framework.