Использование оператора is с неограниченными обобщениями - PullRequest
4 голосов
/ 15 мая 2019

C # Версия: 7.2

My Ms Build version: Unknown (если кто-нибудь может сказать мне, как найти его на моей машине, пожалуйста, сделайте)

Моя версия Visual Studio: Visual Studio Professional 2019

Я собираюсь свести это к минимуму, так что не обращайте внимания на простоту кода.

public bool IsNull<T>(T thing)
{
    return thing is null;
}

В Visual Studio 2019 это нормально и компилируется.

Я могу назвать это так

IsNull(0); //thats an int

и он компилирует и возвращает false, поскольку целые числа никогда не равны нулю Я счастлив, и все хорошо.

Однако мой сервер сборки не устраивает. Он использует MSBuild v15.5.180.51428 и выдает ошибку компилятора, говорящую

ошибка CS0403: Невозможно преобразовать значение NULL в параметр типа 'TValue', поскольку это может быть тип значения, который не может быть равен нулю. Попробуйте использовать 'default (TValue)'

Это также происходит на компьютере коллеги, использующем VS2017

Задокументировано ли это исправление / изменение. В какой версии MSBuild она доступна?

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Это действительно ошибка.Используемый шаблон является шаблоном C # 8.0 и не должен компилироваться, если для языковой версии установлено значение 7.2.Это уже было сообщено и исправлено в нашей базе кода.Он будет доступен в MSBuild, который поставляется с обновлением VS2019 2.

2 голосов
/ 15 мая 2019

РЕДАКТИРОВАТЬ: Это ошибка компилятора в VS 2019 - эта функция только в C # 8, и из VS 2019 Обновление 1 необходимо включить C # 8, чтобы избавиться от этого сообщения.

Этоизменение, которое было сделано в компиляторе - вам нужны как минимум инструменты Visual Studio 2019 (MSBuild 16) для сборки этого кода.

Это было реализовано в этом PR для VS 2019: recursive-Patterns (18): Разрешить использование константного шаблона с открытым типом в качестве ввода (хотя у меня сложилось впечатление, что C # 8 должен быть включен для этого, но, очевидно, нет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...