Tôi đã kích hoạt tính năng này trong một dự án có các lớp đối tượng truyền dữ liệu (DTO), như được đưa ra dưới đây:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Nhưng tôi nhận được lỗi:
CS8618
: Thuộc tính không thể rỗng 'ServiceUrl' chưa được khởi tạo. Xem xét khai báo tài sản là nullable.
Đây là lớp DTO, vì vậy tôi không khởi tạo các thuộc tính. Đây sẽ là trách nhiệm của mã khởi tạo lớp để đảm bảo rằng các thuộc tính là không rỗng.
Ví dụ, người gọi có thể làm:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Câu hỏi của tôi: Làm thế nào để xử lý các lỗi như vậy trong các lớp DTO khi bối cảnh vô hiệu hóa của C # 8 được bật?
Plain Old C# Object
. Chỉ là một đối tượng như bất kỳ đối tượng nào khác, mà không kế thừa từ bất kỳ lớp đặc biệt nào. Tôi nghi ngờ bạn có một câu hỏi khác nhau . Cách tạo DTO -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
các lớp nên ở trạng thái hợp lệ luôn. Nếu null
không được phép, tài sản sẽ không bao giờ có giá trị. Có lẽ, thay vì một chuỗi cơ bản, bạn nên sử dụng một lớp chuyên biệt cho URL có thể có giá trị None
or` Missing`, như lớp Tùy chọn trong F #. C # 8 cho phép bạn viết các lớp như vậy và kiểm tra chúng với khớp mẫu
public string ServiceUrl { get; set; } = default! ;
. Tôi hy vọng Roslyn có thể có một cách để xử lý việc khởi tạo muộn ngoài phạm vi của ctor. Tôi đã sử dụng MayBe <T> (như lớp Tùy chọn), nhưng tôi đã chuyển sang Loại tham chiếu không thể thực hiện được trong c # 8 cho mã mới.