используя Nullable DateTime в C # - PullRequest
2 голосов
/ 30 июля 2010

Я хотел присвоить нулевое значение типу DateTime в c #, поэтому я использовал:

public DateTime? LockTime;

Когда LockTime не назначен, LockTime.Value по умолчанию содержит ноль. Я хочу иметь возможность изменить LockTime.Value на ноль после того, как ему было назначено другое значение.

Ответы [ 6 ]

4 голосов
/ 30 июля 2010

Нет, если LockTime не было присвоено значение, по умолчанию оно будет иметь значение NULL, поэтому LockTime.Value выдаст исключение, если вы попытаетесь получить к нему доступ.

Вы не можете присвоить null самому LockTime.Value, во-первых, потому что он доступен только для чтения, а во-вторых, потому что тип LockTime.Value является типом , не допускающим нуля DateTime.

Однако вы можете установить значение переменной равным NULL несколькими различными способами:

LockTime = null; // Probably the most idiomatic way
LockTime = new DateTime?();
LockTime = default(DateTime?);
4 голосов
/ 30 июля 2010

Вы можете присвоить null непосредственно переменной (свойство Value доступно только для чтения и ему нельзя присвоить значение):

LockTime = null;
2 голосов
/ 30 июля 2010
     DateTime? nullableDT = null;
     Console.WriteLine("{0}\t{1}", nullableDT.HasValue, nullableDT);
     nullableDT = DateTime.Now;
     Console.WriteLine("{0}\t{1}", nullableDT.HasValue, nullableDT);
     nullableDT = null;
     Console.WriteLine("{0}\t{1}", nullableDT.HasValue, nullableDT);
     /*
     False
     True    30.07.2010 11:17:59
     False
     */
2 голосов
/ 30 июля 2010

Объект Value доступен только для чтения, поэтому вы не можете присвоить ему значение. То, что вы можете сделать, это присвоить нулевое значение полю LockTime:

LockTime = null;

Однако это создаст новый экземпляр DateTime?, поэтому любые другие фрагменты кода, имеющие ссылку на исходный экземпляр LockTime, не увидят этого изменения. В этом нет ничего странного, это то же самое, что происходит с обычным DateTime, так что это просто то, с чем ваш код должен изящно работать.

2 голосов
/ 30 июля 2010

Вы пробовали LockTime = null?

0 голосов
/ 14 августа 2013

Вы можете определить переменную следующим образом:

private Nullable<DateTime> _assignedDate;  
_assignedDate = DateTime.Now;

и затем присвоить нулевое значение:

_assignedDate = null;
...