Pertimbangkan kode berikut:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Pada Name = Name.ToUpper () saya mendapat peringatan bahwa Name adalah referensi nol, yang jelas salah. Saya bisa menyembuhkan peringatan ini dengan memasukkan HasName sehingga kondisinya adalah jika (Nama! = Null).
Apakah ada cara saya bisa menginstruksikan kompiler bahwa tanggapan sebenarnya dari HasName menyiratkan kendala non-nullability pada Nama?
Ini penting karena HasName mungkin sebenarnya menguji lebih banyak hal, dan saya mungkin ingin menggunakannya di beberapa tempat, atau mungkin menjadi bagian publik dari permukaan API. Ada banyak alasan untuk ingin memasukkan cek nol ke dalam metode itu sendiri, tetapi hal itu tampaknya mematahkan pemeriksa referensi nullable.
#nullable disable
itu #nullable enable
atau restore
lagi sesudahnya ( docs.microsoft.com/en-us/dotnet/csharp/… ).
!
operator "sialan" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
pada jenis yang dapat dibatalkan, bukan mengeceknyanull
. Ini mungkin tidak mempengaruhi masalah Anda.