“是什么意思?”&引用;在C#中的变量之后?
这种情况意味着什么“是什么意思?”&引用;在C#中的变量之后?,c#,c#-4.0,operators,C#,C# 4.0,Operators,这种情况意味着什么 if (!helper?.Settings.HasConfig ?? false) 附言 helper是某些类的变量 设置是一些字段 HasConfig也是一个字段 那么,?。是一个空条件运算符 如果x为null,则表示返回null,否则表示返回x.y ?是一个空合并运算符 表示如果x==null返回y,否则x 综合以上所有因素 helper?.Settings.HasConfig ?? false 表示:返回falseif helper == null or he
if (!helper?.Settings.HasConfig ?? false)
附言
是某些helper
类的变量
是一些字段设置
也是一个字段HasConfig
?。
是一个空条件运算符
如果x
为null,则表示返回null
,否则表示返回x.y
?
是一个空合并运算符
表示如果x==null
返回y
,否则x
综合以上所有因素
helper?.Settings.HasConfig ?? false
表示:返回false
if
helper == null or
helper.Settings.HasConfig == null
否则返回
helper.Settings.HasConfig
没有?
和?。
如果的代码可以重写为繁琐的代码
在访问“Settings”属性之前,它将检查“helper”是否为NULL,以避免NullReferenceException。
“旧”方法是这样的:if(helper!=null&&!helper.Settings…。检查:
x?.y–空条件成员访问。如果左侧操作数为null,则返回null
x??y–如果不为空,则返回x;否则,返回y
因此helper?.Settings
将返回null,如果helper
为null,否则它将返回helper.Settings
如果helper.Settings
不为null且helper.Settings.HasConfig
不为null,则它将返回helper.Settings.HasConfig
的值,否则将返回false
注意:如果helper?.Settings
为空,则会发生空引用异常。?。
操作符称为C#6中引入的安全导航操作符。
空条件运算符语法
空条件运算符(?)通俗地称为“Elvis运算符”
,因为它类似于一对黑色的眼睛,在一头蓬松的头发下。空条件是成员访问运算符(The.)的一种形式。下面是空条件运算符的简化解释:
如果左操作数(A)非空,则表达式A?.B
的计算结果为B
;否则,它将计算tonull
更多详细信息充分定义了行为:
- 表达式A?的类型.B是B的类型,在B为
引用类型。如果B是值类型,则表达式a?.B是
可为Null的类型,它包装由B表示的基础值类型
- 该特性的规范要求评估一个不
不止一次
- 空条件运算符短路,这意味着您
可以链接多个?运算符,知道第一个为空
遇到的问题将阻止的剩余(最右侧)组件
表达式不被计算
示例:-假设我们有一个学生班
假设s代表一个学生。考虑这两个陈述:
var name = s?.FirstName;
var age = s?.Age;
变量名是一个字符串。name的值取决于s
的值。如果s
为空,则name为空。如果s
不为空,则name是s.FirstName
的值。请注意,s.FirstName
可能为空,即使s
不为空
变量age是一个int?
(这是指定可空值的另一种方式)。与name一样,age的值取决于s
的值。如果s为null
,则age为不带值的int?
。如果s非空,则age是s.age的包装值
这是最基本的。此功能的强大功能来自于所有使用此功能的场景,在这些场景中,此功能可以启用更干净的代码
helper.Settings.HasConfig
if (!(helper == null
? false
: (helper.Settings.HasConfig == null
? false
: helper.Settings.HasConfig)))
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
var name = s?.FirstName;
var age = s?.Age;