C # 9.0 kayıtları - boş değer atanamayan başvuru türleri ve yapıcı

Aug 15 2020

Sadece basit bir kayıt denedim:

#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;
}

Uyarılar alıyorum:

Null yapılamayan özellik 'Ad' başlatılmamış. Özelliği null yapılabilir olarak bildirmeyi düşünün.

(CategoryId dışındaki tüm alanlar için aynı)

Doğru anlamak, temelde, bir yapıcı kabul ve tüm alanları ayardır değil otomatik oluşturulan derleyici tarafından ve (kullanırken #nullable enableKendim yazmak zorunda), yani:

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

Sorum şu, bu doğru mu? Bu beni çok şaşırttı, çünkü asıl amacın böyle kayıtlar oluşturmayı gerçekten basit hale getirmek olduğunu düşündüm ve kurucuyu yazmak / sürdürmek çok sıkıcı, özellikle de sık sık değişen büyük kayıtlarda. Yoksa burada bir şey mi kaçırıyorum?

Yanıtlar

3 IvanStoev Aug 15 2020 at 18:06

Otomatik oluşturulmuş bekliyor gibi görünüyor İlköğretim Oluşturucu , ancak yararlanmak zaman otomatik olarak üretilen (ve genel olarak tüm kayıt avantajlar elde) 'dir kayıt türü bildiriminde rekor parametrelerini otomatik olarak eşlenir, kamu getve initözellikleri ve otomatik olarak birincil kurucudan başlatılır, böylece NRT uyarısı ortadan kaldırılır.

Bu, temel olarak normal yapıcı sözdizimini eklenmiş recordanahtar kelime ile kullanarak tüm kayıt türü şekeri elde ettiğiniz anlamına gelir :

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