? 表示判断实例是否为null 得简写方式。
IEnumerable<IAuthorizeData> authData = ep?.metadata.GetOrderedmetadata<IAuthorizeData>();
等同于:
if(null!=ep){ IEnumerable<IAuthorizeData> authData = ep.metadata.GetOrderedmetadata<IAuthorizeData>();}
用法二:null 合并运算符
?? 表示如果此运算符得左操作数不为 null,则返回左操作数;否则返回右操作数。
IEnumerable<IAuthorizeData> authData = ep?.metadata.GetOrderedmetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>();
等同于:
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;
等同于:
private Nullable<int> getNum = null;
注意默认值不同:
int Num; //默认 0int? Num; // 默认 nullConsole.WriteLine(Num ?? 0) //输出 0
来自dotNET兄弟会