Код: Выделить всё
public interface IParameter
{
public string? Input { get; set; }
}
public static class FalseWarningTest
{
public static string[] SeeTheFalseWarning(this IParameter parameter)
{
if (string.IsNullOrWhiteSpace(parameter.Input))
{
throw new InvalidOperationException("Input must have value");
}
return parameter.Input.Split(':');
}
}

Однако, когда я явно проверяю значение null (что должно быть избыточным), предупреждение исчезает:
Код: Выделить всё
public static string[] SeeTheFalseWarning(this IParameter parameter)
{
if (parameter.Input == null || string.IsNullOrWhiteSpace(parameter.Input))
{
throw new InvalidOperationException("Input must have value");
}
return parameter.Input.Split(':');
}
Редактировать № 1 :
Установка локальной переменной и выполнение значения null/пробела по-прежнему выдает то же предупреждение CS8602, как показано на снимке экрана ниже.

Редактировать № 2:< /strong>
Я заметил, что код написан в соответствии с .NET Standard 2.0. При тестировании того же кода в .NET 6 я не получил такого же предупреждения от компилятора. Учитывая, что я не сторонник использования оператора, допускающего нулевое значение, обходной путь: строка input = параметр.Input ?? string.Empty; может быть безопасным и простым способом управления предупреждением.
Подробнее здесь: https://stackoverflow.com/questions/782 ... 22-net-6-0