Bản ghi C # 9.0 - kiểu tham chiếu không thể null và phương thức khởi tạo

Aug 15 2020

Tôi chỉ thử một bản ghi đơn giản:

#nullable enable

public record Product
{
    public readonly string Name;
    public readonly int CategoryId;
    public readonly string Phone;
    public readonly Address Address;
    public readonly Manager Manager;
}

Tôi nhận được cảnh báo:

Thuộc tính không thể nullable 'Tên' chưa được khởi tạo. Hãy xem xét việc khai báo thuộc tính là nullable.

(giống nhau cho tất cả các trường ngoại trừ CategoryId)

Về cơ bản, nếu tôi hiểu đúng, một hàm tạo chấp nhận và thiết lập tất cả các trường không được trình biên dịch tự động tạo và (khi sử dụng #nullable enable) tôi phải tự viết nó, tức là:

public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
  this.Name=Name;
  this.CategoryId=CategoryId;
   ...
}

Câu hỏi của tôi là, điều này có chính xác không? Tôi rất ngạc nhiên về điều này vì tôi nghĩ toàn bộ điểm là làm cho việc tạo các bản ghi như vậy thực sự đơn giản và việc phải viết / duy trì hàm tạo là rất tẻ nhạt, đặc biệt là trên các bản ghi lớn thay đổi thường xuyên. Hay tôi đang thiếu một cái gì đó ở đây?

Trả lời

3 IvanStoev Aug 15 2020 at 18:06

Bạn dường như được mong đợi các tính năng tự động tạo ra Primary Constructor , nhưng nó là tự động tạo ra (và nói chung bạn sẽ có được tất cả những lợi ích kỷ lục) khi bạn sử dụng các thông số kỷ lục trong việc kê khai loại kỷ lục , mà sẽ được tự động ánh xạ tới công chúng getvà initcác thuộc tính và được khởi tạo tự động từ phương thức khởi tạo chính, do đó loại bỏ cảnh báo NRT.

Điều đó có nghĩa là bạn nhận được tất cả các đường loại bản ghi về cơ bản bằng cách sử dụng cú pháp hàm tạo thông thường với recordtừ khóa được thêm vào :

public record Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) { }