Aktywowałem tę funkcję w projekcie posiadającym klasy obiektów przesyłania danych (DTO), jak podano poniżej:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Ale dostaję błąd:
CS8618
: Właściwość niezerowa „ServiceUrl” jest niezainicjowana. Rozważ zadeklarowanie właściwości jako zerowalną.
To jest klasa DTO, więc nie inicjuję właściwości. Będzie to odpowiedzialnością kodu inicjującego klasę, aby upewnić się, że właściwości nie mają wartości null.
Na przykład osoba dzwoniąca może:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Moje pytanie: Jak radzić sobie z takimi błędami w klasach DTO, gdy włączony jest kontekst dopuszczalności C # 8?
Plain Old C# Object
. Po prostu obiekt jak każdy inny, bez dziedziczenia po specjalnej klasie. Podejrzewam, że masz inne pytanie. Jak tworzyć DTO -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
klasa powinna być zawsze w poprawnym stanie. Jeśli null
nie jest dozwolone, właściwość nigdy nie powinna być pusta. Być może zamiast podstawowego ciągu znaków powinieneś użyć specjalnej klasy dla adresu URL, która może mieć wartość lub None
`Missing`, jak klasa Option w F #. C # 8 pozwala pisać takie klasy i sprawdzać je za pomocą dopasowania wzorca
public string ServiceUrl { get; set; } = default! ;
. Mam nadzieję, że Roslyn może mieć w przyszłości sposób obsługi późnej inicjalizacji poza zakresem ctor. Używałem MayBe <T> (podobnie jak klasa Option), ale dla nowego kodu przestawiłem się na zerowy typ referencyjny w c # 8.