Hãy xem xét các mã sau đây:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Trên Name = Name.ToUpper () tôi nhận được một cảnh báo rằng Tên là một tham chiếu null có thể, rõ ràng là không chính xác. Tôi có thể chữa cảnh báo này bằng cách nội tuyến HasName để điều kiện là if (Name! = Null).
Có cách nào tôi có thể chỉ dẫn cho trình biên dịch rằng một phản hồi thực sự từ HasName ngụ ý ràng buộc không vô hiệu đối với Tên không?
Điều này rất quan trọng vì HasName thực sự có thể kiểm tra nhiều thứ hơn nữa và tôi có thể muốn sử dụng nó ở một số nơi hoặc nó có thể là một phần công khai của bề mặt API. Có nhiều lý do để muốn đưa yếu tố kiểm tra null vào phương thức riêng của nó, nhưng làm như vậy dường như phá vỡ trình kiểm tra tham chiếu nullable.
#nullable disable
sau đó #nullable enable
hoặc restore
một lần nữa sau đó ( docs.microsoft.com/en-us/dotnet/csharp/ Lỗi ).
!
toán tử "chết tiệt" . if(HasName) { Name = Name!.ToUpper(); }
HasValue
trên một loại nullable, không kiểm tra nónull
. Nó có thể không ảnh hưởng đến vấn đề của bạn mặc dù.