Rozważ następujący kod:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Na Name = Name.ToUpper () pojawia się ostrzeżenie, że Name to możliwe odwołanie zerowe, co jest wyraźnie niepoprawne. Mogę wyleczyć to ostrzeżenie, wpisując HasName, więc warunkiem jest if (Nazwa! = Null).
Czy jest jakiś sposób, w jaki mogę pouczyć kompilator, że prawdziwa odpowiedź HasName implikuje ograniczenie związane z brakiem wartości dopuszczalnej dla Name?
Jest to ważne, ponieważ HasName może faktycznie przetestować o wiele więcej rzeczy i może chciałbym użyć go w kilku miejscach lub może to być publiczna część powierzchni API. Istnieje wiele powodów, dla których warto uwzględnić sprawdzanie wartości NULL we własnej metodzie, ale wydaje się, że powoduje to uszkodzenie sprawdzania wartości referencyjnych.
#nullable disable
następnie #nullable enable
lub restore
później ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
operatora „cholera” . if(HasName) { Name = Name!.ToUpper(); }
HasValue
na typ zerowalny, a nie sprawdzać gonull
. Prawdopodobnie nie wpływa to jednak na twój problem.