не удается неявно преобразовать тип System.Датавремя? системы.значение datetime

когда я делаю следующее Я:

    inv.RSV = pid.RSVDate

Я получаю следующее: невозможно неявно преобразовать тип System.Датавремя? системы.значение datetime.

в этом случае inv.RSV-это DateTime и pid.RSVDate-это DateTime?

я попробовал следующее, но не удалось:

 if (pid.RSVDate != null)
 {                

    inv.RSV = pid.RSVDate != null ? pid.RSVDate : (DateTime?)null;
 }

Если pid.RSVDate имеет значение null, мне нравится не назначать inv.RSV ничего, в этом случае это будет null.

5 ответов


DateTime не может быть null. По умолчанию это DateTime.MinValue.

что вы хотите сделать, это следующее:

if (pid.RSVDate.HasValue)
{
    inv.RSV = pid.RSVDate.Value;
}

или, короче:

inv.RSV = pid.RSVDate ?? DateTime.MinValue;

вам нужно сделать RSV свойство nullable тоже или выберите значение по умолчанию для случая, когда RSVDate равно null.

inv.RSV = pid.RSVDate ?? DateTime.MinValue;

потому что inv.RSV не является нулевым полем, оно не может быть нулевым. Когда вы инициализируете свой объект, это inv по умолчанию.RSV к пустому DateTime, то же самое, что вы получили бы, если бы сказали

inv.RSV = new DateTime()

Итак, если вы хотите установить inv.РСВ пид.RSV если это не NULL или значение DateTime по умолчанию равно null, сделайте следующее:

inv.RSV = pid.RSVDate.GetValueOrDefault()

если тот, который назначается в качестве DateTime и назначенный от DateTime?, вы могли бы использовать

int.RSV = pid.RSVDate.GetValueOrDefault();

это поддерживает перегрузку, которая позволяет задать значение по умолчанию, если значение по умолчанию для DateTime не подходит.

если pid.RSVDate имеет значение null, мне нравится не назначать inv.RSV все, в чем case это будет null.

int.RSV не будет null, как вы уже сказали это DateTime, не nullable тип. Если он никогда не назначается вами, он будет иметь значение по умолчанию его типа, которое является DateTime.MinValue, или 1 января 0001.

inv.RSV был нулевым для начала. Как сказать, не обновляйте его, для pid нет значения.RSVDate

опять же, это просто не может быть, учитывая ваше описание имущества. Однако, если вообще говоря, вы не хотите обновлять inv.RSV если pid.RSVDate равно null (и вы просто путаетесь в своем слова), то вы просто напишете if проверьте назначение.

if (pid.RSVDate != null)
{
    inv.RSV = pid.RSVDate.Value;
}

pid.RSVDate может быть null, тогда как inv.RSV нет, что произойдет, если RSVDate is null?

вам нужно проверить, является ли значение null перед -

if(pid.RSVDate.HasValue)
    inv.RSV = pid.RSVDate.Value;

но что бы значение inv.RSV быть, если RSVDate равно null? Есть ли всегда будет ли дата в этом отеле? Если это так, вы можете использовать ?? оператор присвоения значения по умолчанию, если вы хотите.

pid.RSV = pid.RSVDate ?? myDefaultDateTime;