Plu*_*ell 10 c# operators c#-4.0
这个条件是什么意思?
if (!helper?.Settings.HasConfig ?? false)
Run Code Online (Sandbox Code Playgroud)
PS
helper 是某类的变量Settings 是一些领域HasConfig 也是场Dmi*_*nko 18
好吧,?.是一个空条件运算符
https://msdn.microsoft.com/en-us/library/dn986595.aspx
X?.Y
表示返回nullif x为null和x.y否则
??是一个null-coalescing运算符
https://msdn.microsoft.com/en-us/library/ms173224.aspx
x?.y
Run Code Online (Sandbox Code Playgroud)
表示是否x == null返回y,否则x
结合以上所有
x ?? y
Run Code Online (Sandbox Code Playgroud)
意思是:false如果返回
helper?.Settings.HasConfig ?? false
Run Code Online (Sandbox Code Playgroud)
否则返回
helper == null or
helper.Settings.HasConfig == null
Run Code Online (Sandbox Code Playgroud)
没有代码??和?. if可以改写成繁琐
helper.Settings.HasConfig
Run Code Online (Sandbox Code Playgroud)
小智 6
?.运算符被称为safe navigation operatorC# 6 中引入的 Null 条件运算符语法
空条件运算符 (?.) 通俗地称为 the,"Elvis operator"因为它类似于一缕头发下的一双黑眼睛。null 条件是成员访问运算符(.)的一种形式。以下是 null 条件运算符的简化说明:
如果左操作数 (A) 不为空,则表达式的A?.B计算结果为;B否则,它的计算结果为 null。
更多细节完全定义了行为:
在 B 是引用类型的情况下,表达式 A?.B 的类型是 B 的类型。如果 B 是值类型,则表达式 A?.B 是包装 B 表示的基础值类型的可为空类型。
该功能的规范要求 A 的评估不得
超过一次。
null 条件运算符短路,这意味着您
可以链接多个 ?. 运算符,因为知道遇到的第一个 null会阻止
计算表达式
的其余(最右边)组件。
示例:- 假设我们有一个 Student 类
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
假设 s 代表一名学生。考虑以下两个陈述:
var name = s?.FirstName;
var age = s?.Age;
Run Code Online (Sandbox Code Playgroud)
变量名称是一个字符串。name 的值取决于 的值s。如果s为空,则名称为空。如果s不为 null,则 name 为 的值s.FirstName。请注意,s.FirstName即使当s不是,也可能为空。
变量age是一个int?(这是指定Nullable的另一种方式)。与 name 一样,age 的值取决于 的值s。如果 s 是null,则年龄是int?没有值的。如果 s 非空,则 Age 是 的包装值s.Age。
这就是基础知识。此功能的强大之处在于此功能可实现更简洁的代码的所有场景。