Bu özelliği, aşağıda verildiği gibi, veri aktarım nesnesi (DTO) sınıflarına sahip bir projede etkinleştirdim:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Ama hatayı alıyorum:
CS8618
: Null değeri olmayan 'ServiceUrl' özelliği başlatılmadı. Mülkü boş olarak bildirmeyi düşünün.
Bu bir DTO sınıfı, bu yüzden özellikleri başlatmıyorum. Bu özelliklerin null olmadığından emin olmak için sınıfı başlatan kodun sorumluluğu olacaktır.
Örneğin, arayan şunları yapabilir:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Benim sorum: C # 8'in nullability bağlamı etkinleştirildiğinde DTO sınıflarında bu tür hatalar nasıl ele alınır?
Plain Old C# Object
. Herhangi bir özel sınıftan miras almadan başka herhangi bir nesne gibi. Farklı bir sorunuz olduğundan şüpheleniyorum . DTOs nasıl oluşturulur -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
sınıf her zaman geçerli bir durumda olmalıdır. Eğer null
izin verilmez, mülkiyet gerektiğini asla boş. Belki de, temel bir dize yerine, URL için None
F # seçeneğindeki Option sınıfı gibi veya "Eksik" değerine sahip özel bir sınıf kullanmalısınız . C # 8, bu sınıfları yazmanıza ve desen eşleşmesi ile kontrol etmenize izin verir
public string ServiceUrl { get; set; } = default! ;
. Umarım Roslyn gelecekte Geç başlatmayı ctor kapsamı dışında ele almanın bir yoluna sahip olabilir. MayBe <T> (Option sınıfı gibi) kullanıyordum, ancak yeni kod için c # 8'de nulllable Reference Type'a geçtim.