单问号
c#中问号可以判断字符、引用、事件等是否为空,比如 Action?.Invoke(); 判断Action是否为空,不为空则调用,这样就避免了用if语句进行是否为空的判断。
进阶
开发中会遇到解析json的情况:
JsonData.Code = jslist["Code"];
JsonData.Version = jslist["Version"].ToString();
如果万一我们接收服务器Json数据时,服务器传输了一个null的值比如:
{ "code" : null }
当我们解析时进行ToString()获取某一个键的值时,程序就会报错,那么以防这种意料之外的null值出现,我们可以使用“??"来进行是否为空的判断,类似三元表达式:
object data = "test";
string dataStr= data?.ToString()??"str";
当 data==null 时,单问号判断为空,不会进行ToString() 操作,dataStr会进入双问号判断,因为是null,所以被赋值成 “str” ,当data!=null时,dataStr会被单问号判断不为空,直接ToString(),赋予data的原始值也就是"test";