Saya mengaktifkan fitur ini dalam proyek yang memiliki kelas objek transfer data (DTO), seperti yang diberikan di bawah ini:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Tapi saya mendapatkan kesalahan:
CS8618
: Properti Non-nullable 'ServiceUrl' tidak diinisialisasi. Pertimbangkan menyatakan properti sebagai tidak dapat dibatalkan.
Ini adalah kelas DTO, jadi saya tidak menginisialisasi properti. Ini akan menjadi tanggung jawab kode yang menginisialisasi kelas untuk memastikan bahwa properti tidak nol.
Misalnya, pemanggil dapat melakukan:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Pertanyaan saya: Bagaimana menangani kesalahan seperti itu di kelas DTO ketika konteks nullability C # 8 diaktifkan?
Plain Old C# Object
. Hanya objek seperti yang lain, tanpa mewarisi dari kelas khusus apa pun. Saya curiga Anda memiliki pertanyaan yang berbeda . Cara membuat DTO -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
kelas harus selalu dalam keadaan valid. Jika null
tidak diizinkan, properti tidak boleh nol. Mungkin, alih-alih string dasar Anda harus menggunakan kelas khusus untuk URL yang dapat memiliki nilai atau None
`Hilang`, seperti kelas Opsi di F #. C # 8 memungkinkan Anda untuk menulis kelas seperti itu dan memeriksanya dengan pencocokan pola
public string ServiceUrl { get; set; } = default! ;
. Saya berharap Roslyn mungkin di masa depan memiliki cara untuk menangani inisialisasi Terlambat di luar ruang lingkup aktor. Saya menggunakan MayBe <T> (seperti kelas Opsi), tetapi saya beralih ke Jenis Referensi yang dapat dibatalkan dalam c # 8 untuk kode baru.