在C#中定义了一个DateTime类型的变量。在没给它赋值的情况下它默认会得到一个0001-1-1 0:00:00值

如何去除 Datetime的字段会自动赋默认值0001-1-1 0:00:00?

解决方案在:实体类中加入Nullable<T>泛型

实例如下:

public class BaseEntity

   {

       /// <summary>

       /// 创建时间

       /// </summary>


       public virtual Nullable<DateTime> CreateTime { get; set; }  


       /// <summary>

       /// 创建者ID

       /// </summary>


       public virtual string CreateUserId { get; set; }


       /// <summary>

       /// 修改时间

       /// </summary>

       public virtual Nullable<DateTime> UpdateTime { get; set; }


       /// <summary>

       /// 最后修改人Id

       /// </summary>

       public virtual string UpdateUserId { get; set; }


       /// <summary>

       /// 删除时间

       /// </summary>


       public virtual Nullable<DateTime> DeleteTime { get; set; }


       /// <summary>

       /// 删除人id

       /// </summary>


       public virtual string DeleteUserId { get; set; }

       /// <summary>

       /// 是否删除

       /// </summary>


       public virtual bool IsDeleted { get; set; }

   }

总结:在C# 2.0里面的数据类型中,分为值类型和引用类型,引用类型可以初始化为null,可是值类型是不可以的。

比如经常用到的System.Guid类型,要么赋值为Guid.NewId,要么赋值为Guid.Empty。

再比如System.DateTime,默认初始化为DateTime.MinValue。

强行给值类型赋null值,编译就不会通过,会报出类似下面的异常:c#:无法将 NULL 转换成“System.DateTime”


借助Nullable<T>结构体可以实现初始化为null,只能是值类型不可是引用类型

值类型可以通过这种方法变成引用类型,但是引用类型不可以哟。比如下面这段代码:

Nullable<string> test = "ddd";

这段代码编译无法通过,会报出以下异常:

错误 1 类型“string”必须是不可为空的值类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”