Я играю с обнуляемыми типами в c# 8 и обнаружил проблему, которая меня беспокоит. Предположим, у меня есть метод, который принимает обнуляемый параметр. Когда параметр имеет значение null, я хочу создать исключение c. Но я хочу, чтобы метод был чистым и проверял параметр где-то еще. Метод check вызывает исключение, поэтому после метода параметр не может иметь значение null. К сожалению, компилятор этого не видит и выдает предупреждения у меня. Вот метод:
public void Foo(string? argument)
{
GuardAgainst.Null(argument, nameof(argument));
string variable = argument; // <-- Warning CS8600 Converting null literal or possible null value to non - nullable type
var length = argument.Length; //<--Warning CS8602 Dereference of a possibly null reference
}
Вот метод проверки:
public static void Null(string? text, string paramName)
{
if (text == null)
throw new ArgumentNullException(paramName);
}
Теперь я могу отключить предупреждение следующим образом:
#pragma warning disable CS8602
var length = argument.Length;
#pragma warning restore CS8602
но это вроде убивает мое намерение содержать мой код в чистоте. Итак, мой вопрос: есть ли лучший способ подавить предупреждения? Или, может быть, сказать компилятору, что теперь параметр гарантированно не будет нулевым?