可以为空的日期时间值

时间:2012-07-24 13:42:01

标签: c#

DateTime值可以NULL吗?

我有这段代码:

从这里继承我的变量

namespace Transakcija
{
     public class Line
     {
        public System.DateTime DateOfProduction { get; set; }
     }
}

然后为每个循环:

foreach (var rw_det in dt_stavke.Rows)
{
    var list = new List<Transakcija.Line>();
    var l = new Transakcija.Line();

     //DateOfProduction
    if (rw_det["DPRO02"].ToString().Length <= 0)
    {
        l.DateOfProduction = default(DateTime);
    }
    else
    {
        l.DateOfProduction = new DateTime();
        prod_date = rw_det["DPRO02"].ToString();
        DateTime pro_date = DateTime.ParseExact(prod_date, "dd.MM.yyyy", CultureInfo.InvariantCulture);
        string p_date = pro_date.ToString("yyyy-MM-dd");
        l.DateOfProduction = DateTime.Parse(p_date);
    }
}

因此值l.DateOfProduction必须为null。我试过这个:

DateTime? dt = null;
l.DateOfProduction = (DateTime)dt;

但是我收到了错误:nullable object must have a value

这是可能的,还是我必须将最小datetime值传递给变量?

3 个答案:

答案 0 :(得分:8)

DateTime是一种值类型,因此不能永远不是null。如果您需要“无价值”值,请使用Nullable<DateTime>或简称DateTime?

答案 1 :(得分:4)

您可以使用constructor

指定可为空的DateTime
DateTime? dt = new Nullable<DateTime>(); 

您可以使用HasValue属性检查可空类型是否为null

if(dt.HasValue)
{
    // now you can safely use dt.Value as DateTime, 
    // otherwise accessing the Value property raises an InvalidOperationException
    DateTime otherDate = dt.Value;
}

答案 2 :(得分:1)

你可以这样使用Datetime Nullable

DateTime? dtNullable = new Nullable<DateTime>(); 

if(dtNullable.HasValue)
 l.DateOfProduction = dtNullable.Value;

PS:例如,如果你将一个不可为空的DateTime传递给Nullable DateTime那么它将需要转换

喜欢这个

DateTime? nullableDateTime = (DateTime?)nonNullableDateTime;