Рассмотрим следующий код:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
На Name = Name.ToUpper () я получаю предупреждение, что Name - это возможная нулевая ссылка, которая явно неверна. Я могу вылечить это предупреждение, вставив HasName, так что условие if (Name! = Null).
Есть ли какой-нибудь способ, которым я могу указать компилятору, что истинный ответ от HasName подразумевает ограничение не обнуляемости для Name?
Это важно, потому что HasName может на самом деле тестировать намного больше вещей, и я могу захотеть использовать его в нескольких местах, или это может быть публичной частью поверхности API. Есть много причин, чтобы захотеть включить нулевую проверку в свой собственный метод, но это, похоже, нарушает проверку ссылок на пустые значения.
#nullable disable
потом #nullable enable
или restore
снова ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
оператор "dammit" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
на обнуляемый тип, а не проверять егоnull
. Это, вероятно, не влияет на вашу проблему, хотя.