C#基础知识拾遗:小问号大用途
用法一:null 判断运算符
?
表示判断实例是否为null
的简写方式。
IEnumerable<IAuthorizeData> authData =
ep?.Metadata.GetOrderedMetadata<IAuthorizeData>();
等同于:
代码语言:javascript复制if(null!=ep)
{
IEnumerable<IAuthorizeData> authData =
ep.Metadata.GetOrderedMetadata<IAuthorizeData>();
}
用法二:null 合并运算符
??
表示如果此运算符的左操作数不为 null
,则返回左操作数;否则返回右操作数。
IEnumerable<IAuthorizeData> authData =
ep?.Metadata.GetOrderedMetadata<IAuthorizeData>()
?? Array.Empty<IAuthorizeData>();
等同于:
代码语言:javascript复制IEnumerable<IAuthorizeData> authData;
if(null!=ep)
{
if(null!=ep.Metadata.GetOrderedMetadata<IAuthorizeData>())
{
authData = ep.Metadata.GetOrderedMetadata<IAuthorizeData>();
}
else
{
authData = Array.Empty<IAuthorizeData>();
}
}
else
{
authData = Array.Empty<IAuthorizeData>();
}
用法三:三元运算符
? :
表示根据布尔表达式的计算结果为 true
还是 false
来返回两个表达式中的一个结果。
IEnumerable<IAuthorizeData> authData =
ep==null ? Metadata.GetOrderedMetadata<IAuthorizeData>()
: Array.Empty<IAuthorizeData>();
用法四:可空类型
Type?
表示可为 null
类型,等同于 Nullable<T>
。
private int? getNum = null;
等同于:
代码语言:javascript复制private Nullable<int> getNum = null;
注意默认值不同:
代码语言:javascript复制int Num; //默认 0
int? Num; // 默认 null
Console.WriteLine(Num ?? 0) //输出 0