C#带空值的日期转换用法小常识

定义日期可为空,很简单直接用 DateTime? 即可。

但是设置日期为空呢?常用的方法是:DateTime? date=null  ,但在隐式或者显式转换、类型推荐过程就无法直接使用。

因为 null  属于无类型范畴,导致无法推断为何种类型。

 以三元运算为例,需求:布尔型判断为真取当前日期,否则日期赋值为空。

var date=isConfirm?DateTime.Now.Date:null  如此写法肯定会报错,因为上面说了 null 是无类型的,并不能隐式转换为 DataTime  型,所以正确的做法需要给它赋与可空的类型,保证分支前后的类型为一致,下面提供几种写法:

一,给null  赋与类型

var date=isConfirm?DateTime.Now.Date:(DateTime?)null  或者 var date=isConfirm?(DateTime?)DateTime.Now.Date:null  

二、使用 关键字 default 分配可为空的类型

var date=isConfirm?DateTime.Now.Date:default(DateTime?)

三、提前定义好类型,无隐式转换

DateTime? date=null; 

if(isConfirm)date=DateTime.Now.Date

四、封装一个方法

public static class ConditionalExtensions
{
    public static T? ToNullable<T>(this T value, bool condition) where T : struct
    {
        return condition ? value : (T?)null;
    }
}

调用: DateTime? date = DateTime.Now.Date.ToNullable(isConfirm);

 

posted @ 2026-02-13 16:43  Luckyfish小文  阅读(25)  评论(0)    收藏  举报