您当前的位置: 首页 >  c#

[C#]问号?和双问号??

发布时间:2021-04-20 07:57:39 ,浏览量:0

问号?和双问号??
    • 1.问号?表示该变量可以为空
    • 2. 双问号表示如果为双问号左边的变量为null,则取右边的值,否则取左边变量的值。
1.问号?表示该变量可以为空
int? a=new int?(); Console.Writeline(a);//a是null 

等价于:

int? a=null; 

也等价于下面这行,表示该变量默认为null.

int? a; 
2. 双问号表示如果为双问号左边的变量为null,则取右边的值,否则取左边变量的值。
c=a??b; 

等价于:

c=(a==null)?b:a; 

但有几点需要注意

  1. a,b必须是相同类型,且a可以为空(a要么是object,string等引用类型,要么是int?或float?或double?等nullable的值类型,要么是dynamic动态类型) 例如
//例1  a,b同类型,a为引用类型,可以为空 object a=null; object b=10; object c=a??b//a,b,c的类型相同 
//例2  a,b同类型,a为nullable类型 int? a=null; int b=10; int c=a??b 
或者 float c=a??b//a??b表达式的值为int型,隐式转换为float型 

错误示例:

//例3  a,b是不同类型,报错 int? a=null; string b="hello"; string c=a??b;//报错,运算符“??”无法应用于“int?”和“string”类型的操作数 
  1. a??b表达式的值类型与a、b相同,因此c 要么跟a、b同类型,要么对a??b表达式的值进行隐式转换或者强制类型转换,才能赋值给c. 例如上面的例1,例2的最后一行给c赋值,以及下面的例子都是可以的:
int? a=null; int b=10; string c=(a??b).ToString(); 或者 object a=null; object b=10; int c=(int)(a??b) 
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108697博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0486s