У меня есть 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
в верхней части файла.