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);

浙公网安备 33010602011771号