У меня есть DTO, который заполняется чтением из таблицы DynamoDB. Скажем, сейчас это выглядит так:
public class Item
{
public string Id { get; set; } // PK so technically cannot be null
public string Name { get; set; } // validation to prevent nulls but this doesn't stop database hacks
public string Description { get; set; } // can be null
}
Есть ли лучшая практика для решения этой проблемы? Я бы предпочел избегать конструктора без параметров, поскольку он плохо работает с ORM в Dynamo SDK (как и с другими).
Мне кажется странным писать, public string Id { get; set; } = "";потому что это никогда не произойдет, так Idкак это PK и никогда не может быть нулевым. Какая польза будет "", даже если это все равно как-нибудь?
Так что лучше в этом деле?
- Должен ли я отметить их всех так,
string?чтобы они говорили, что они могут быть нулевыми, хотя некоторые никогда не должны быть. - Должен ли я инициализировать
IdиNameс,""потому что они никогда не должны быть нулевыми, и это показывает намерение, хотя""никогда не будет использоваться. - Некоторая комбинация выше
Пожалуйста, обратите внимание: это о C # 8 обнуляемых ссылочных типов. Если вы не знаете, на что лучше всего не отвечать.
= ""этого вы можете использовать = null!для инициализации свойство, которое, как вы знаете, никогда не будет эффективно null(когда компилятор не может этого знать). Если это Descriptionможет быть юридически null, это должно быть объявлено string?. В качестве альтернативы, если проверка обнуляемости для DTO более неприятна, чем справка, вы можете просто обернуть тип в #nullable disable/, #nullable restoreчтобы отключить NRT только для этого типа.
#pragma warning disable CS8618в верхней части файла.