Я активировал эту функцию в проекте с классами объекта передачи данных (DTO), как показано ниже:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Но я получаю ошибку:
CS8618
: Необнуляемое свойство 'ServiceUrl' неинициализировано. Подумайте об объявлении свойства обнуляемым.
Это класс DTO, поэтому я не инициализирую свойства. Это будет обязанностью кода, инициализирующего класс, чтобы гарантировать, что свойства не равны NULL.
Например, звонящий может сделать:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Мой вопрос: как обрабатывать такие ошибки в классах DTO, когда включен контекст обнуляемости C # 8?
Plain Old C# Object
. Просто объект, как и любой другой, без наследования от какого-либо специального класса. Я подозреваю, что у вас другой вопрос. Как создать DTO -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
или «отсутствует», как класс Option в F #. C # 8 позволяет вам писать такие классы и проверять их с помощью сопоставления с образцом
public string ServiceUrl { get; set; } = default! ;
. Я надеюсь, что в будущем у Roslyn появится способ справиться с поздней инициализацией за пределами ctor. Я использовал MayBe <T> (как класс Option), но я переключился на обнуляемый ссылочный тип в c # 8 для нового кода.