c# ?和?? 用法
本文不讨论:条件(三元)运算符 (?:)
本文假定你熟悉值类型、引用类型、可空化、泛型等基本概念
概念
?:可空类修饰符,是System.Nullable<T>的简写,下面两条语句等效。
private System.Nullable<System.DateTime> _SubmitDate;
private DateTime? _SubmitDate;
?:空合并运算符,用于定义可空类的默认值,下面语句当_SubmitDate的值不为NULL时就取_SubmitDate 值,为NULL就取MinValue值。
_SubmitDate = _SubmitDate ?? System.DateTime.MinValue;
场景
?:欲让一个值类型可为null时用。
当你用LINQ TO SQL处理数据时,DB表中的SubmitDate datetime NULL,但datetime属于值类型,故项目对应的实体类中SubmitDate属性就得用到"?"
private System.Nullable<DateTime> _SubmitDate ;
或 private DateTime? _SubmitDate;
?:欲给可空类型赋默认值,可用"??"空合并运算符
private DateTime? _SubmitDate;
_SubmitDate =_SubmitDate?? System.DateTime.MinValue;
用法
引用类型默认可null,故不需要用"?"来实现可空化,值类型才需要可空化,最常用的四种值类型是:
1.DateTime
private DateTime? _SubmitDate;
_SubmitDate = _SubmitDate ?? System.DateTime.MinValue;
2.Guid
private Guid? _SID;
_SID = _SID ?? System.Guid.NewGuid();
3.bool
private bool? _IsVip;
_IsVip = _IsVip ?? false;
4.int
private int?, _Age;
_Age = _Age?? 0;
引用类型和可空化后的值类型都可以通过"??"来设置默认值。