Ложное предупреждение: предупреждение CS8602, несмотря на проверку нуля в Visual Studio 2022 (.NET 6.0)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ложное предупреждение: предупреждение CS8602, несмотря на проверку нуля в Visual Studio 2022 (.NET 6.0)

Сообщение Anonymous »

У меня возникла проблема с Visual Studio 2022 (C# .NET 6.0), из-за которой выдается предупреждение CS8602 («Разыменование возможно нулевой ссылки») даже после выполнения проверки на ноль. Вот фрагмент кода:

Код: Выделить всё

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 или пробелов в параметре.Input перед его использованием, Visual Studio по-прежнему предупреждает, что в момент использования он может быть нулевым.< /p>
Изображение
Однако, когда я явно проверяю значение 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(':');
}
Я понимаю, что предупреждение CS8602 — это функция, предотвращающая исключения нулевых ссылок. Но является ли это ошибкой в ​​данном случае, поскольку проверки на нулевое значение и пробелы выполняются перед использованием параметра.Input, или я что-то неправильно понимаю?
Редактировать № 1 :
Установка локальной переменной и выполнение значения null/пробела по-прежнему выдает то же предупреждение CS8602, как показано на снимке экрана ниже.
Изображение

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

Подробнее здесь: https://stackoverflow.com/questions/782 ... 22-net-6-0
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»