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