Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“是什么意思?”&引用;在C#中的变量之后?_C#_C# 4.0_Operators - Fatal编程技术网

“是什么意思?”&引用;在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;