ระเบียน C # 9.0 - ชนิดการอ้างอิงและตัวสร้างที่ไม่เป็นโมฆะ
ฉันลองบันทึกง่ายๆ:
#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;
}
ฉันได้รับคำเตือน:
คุณสมบัติที่ไม่เป็นโมฆะ 'ชื่อ' ไม่ได้กำหนดค่าเริ่มต้น พิจารณาประกาศคุณสมบัติเป็นโมฆะ
(เหมือนกันสำหรับทุกช่องยกเว้น CategoryId)
โดยทั่วไปถ้าฉันเข้าใจถูกต้องตัวสร้างที่ยอมรับและตั้งค่าฟิลด์ทั้งหมดจะไม่สร้างขึ้นโดยอัตโนมัติโดยคอมไพเลอร์และ (เมื่อใช้#nullable enable
) ฉันต้องเขียนด้วยตัวเองเช่น:
public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
this.Name=Name;
this.CategoryId=CategoryId;
...
}
คำถามของฉันคือถูกต้องหรือไม่? ฉันรู้สึกประหลาดใจมากกับสิ่งนี้เพราะฉันคิดว่าจุดรวมคือการสร้างเร็กคอร์ดแบบนั้นง่ายมากและการต้องเขียน / ดูแลคอนสตรัคเตอร์นั้นน่าเบื่อมากโดยเฉพาะอย่างยิ่งในบันทึกขนาดใหญ่ที่มีการเปลี่ยนแปลงบ่อยครั้ง หรือฉันหายไปที่นี่?
คำตอบ
ดูเหมือนคุณจะคาดหวังว่าตัวสร้างหลักที่สร้างขึ้นโดยอัตโนมัติแต่มันถูกสร้างขึ้นโดยอัตโนมัติ (และโดยทั่วไปคุณจะได้รับประโยชน์ทั้งหมดของเรกคอร์ด) เมื่อคุณใช้พารามิเตอร์เรกคอร์ดในการประกาศประเภทเรกคอร์ดซึ่งจะแมปโดยอัตโนมัติกับสาธารณะgetและinitคุณสมบัติและ เริ่มต้นโดยอัตโนมัติจากตัวสร้างหลักดังนั้นจึงกำจัดคำเตือน NRT
ซึ่งหมายความว่าคุณจะได้รับน้ำตาลประเภทเรกคอร์ดทั้งหมดโดยใช้ไวยากรณ์ตัวสร้างปกติพร้อมrecord
คำสำคัญที่เพิ่มเข้ามา
public record Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) { }