ฉันเปิดใช้งานคุณลักษณะนี้ในโครงการที่มีคลาส data data object (DTO) ตามที่ระบุด้านล่าง:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
แต่ฉันได้รับข้อผิดพลาด:
CS8618
: คุณสมบัติที่ไม่สามารถลบล้างได้ 'ServiceUrl' ไม่ได้ถูกกำหนดค่าเริ่มต้น พิจารณาประกาศคุณสมบัติเป็นโมฆะ
นี่คือคลาส DTO ดังนั้นฉันไม่ได้เริ่มต้นคุณสมบัติ สิ่งนี้จะเป็นความรับผิดชอบของรหัสในการเริ่มต้นคลาสเพื่อให้แน่ใจว่าคุณสมบัติไม่เป็นโมฆะ
ตัวอย่างเช่นผู้โทรสามารถทำได้:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
คำถามของฉัน: จะจัดการข้อผิดพลาดดังกล่าวในคลาส DTO ได้อย่างไรเมื่อบริบท C # 8 ถูกเปิดใช้งาน
Plain Old C# Object
มันหมายความว่า เพียงแค่วัตถุเหมือนกันโดยไม่สืบทอดจากคลาสพิเศษใด ๆ ฉันสงสัยว่าคุณมีความแตกต่างกันคำถาม วิธีสร้าง DTOs -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
คลาสควรอยู่ในสถานะที่ถูกต้องเสมอ หากnull
ไม่ได้รับอนุญาตทรัพย์สินจะต้องไม่เป็นโมฆะ บางทีแทนที่จะเป็นสตริงพื้นฐานคุณควรใช้คลาสพิเศษสำหรับ URL ที่สามารถมีค่าเป็นหรือNone
'ขาดหายไป' เช่นคลาสตัวเลือกใน F # C # 8 ช่วยให้คุณสามารถเขียนคลาสดังกล่าวและตรวจสอบด้วยการจับคู่รูปแบบ
public string ServiceUrl { get; set; } = default! ;
อสังหาริมทรัพย์: ฉันหวังว่า Roslyn อาจมีวิธีจัดการกับการกำหนดค่าเริ่มต้นล่าช้านอกขอบเขตของ ctor ฉันใช้ MayBe <T> (เหมือนคลาส Option) แต่ฉันเปลี่ยนเป็นประเภทอ้างอิงที่ไม่มีค่าใน c # 8 สำหรับรหัสใหม่