C#中 ? 和?? 的用法

时间:2022-08-28 00:26:51
C#中 ?? 和? 的意思
1.?
如果直接定义一个 值类型,给负值null;就会提示“无法将 
Null转换成‘值类型(比如:int)’,因为他是一种不可为null的值 
de类型”
例如
int in=null;//错误
int? in=null;//正确
C#中 ? 和?? 的用法
string result=null;//正确 因为string是引用类型不是值类
型
string? result=null;//错误,因为?,只能用于值类型

2.??
var name??:“Hello World!”;//如果name为null,就选择后面那个值,有点类似 var name=name?"Hello World!" :name;

  

补充:

可空类型可以表示基础类型的所有值,另外还可以表示 null 值。可空类型可通过下面两种方式中的一种声明:

1、System.Nullable<T> variable

2、T? variable

T 是可空类型的基础类型。T 可以是包括 struct 在内的任何值类型;但不能是引用类型。

Nullable<int> x =5等价于 int?x=5 可空类型

1.值类型后加问号表示此类型为可空类型,如int? i = null;
2.可空类型与一元或二元运算符一起使用时,只要有一个操作数为null,结果都为null;
3.比较可空类型时,只要一个操作数为null,比较结果就为false。

在使用的时候要注意如下几点:
(1)因为可空类型可能为空,于是很多运算法则将不再简单适用,比如A+B,如果A或者B当中有一个或者两个为可空类型,那么它们便不能简单相加,因为它们可能会为空,这时结果也就可能会为空,所以一定要先使用HasValue属性测试是否为空,或者使用GetValueOrDefault属性返回该基础类型所赋的值或默认值,再或者使用??运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,比如int?x=null;int y=x??-1;,但是切不可直接进行运算。
(2)可空类型可以强制转换为对应的基础类型,比如int?x=3;int y=(int)x;,但在转换之前一定要先测试是否不为空,如果为空的话就会出错。
(3)由于以上两点原因,建议不要随意使用可空类型,只在必要的时候才使用,使用时一定要小心谨慎,随时记得判断是否为空。