VS2015预览版中有了C#6.0,我们有了一个新的操作符,
,可以这样使用:
public class A {
string PropertyOfA { get; set; }
}
...
var a = new A();
var foo = "bar";
if(a?.PropertyOfA != foo) {
//somecode
}
它到底做什么?
这对于C#来说是相对较新的,这使得我们很容易在方法链中调用关于null或非null值的函数。
实现同样的事情的旧方法是:
var functionCaller = this.member;
if (functionCaller!= null)
functionCaller.someFunction(var someParam);
现在,只需以下几点,它就变得容易多了:
member?.someFunction(var someParam);
我强烈推荐这个文档页面。
它在展平层次和/或映射对象时非常有用。而不是:
if (Model.Model2 == null
|| Model.Model2.Model3 == null
|| Model.Model2.Model3.Model4 == null
|| Model.Model2.Model3.Model4.Name == null)
{
mapped.Name = "N/A"
}
else
{
mapped.Name = Model.Model2.Model3.Model4.Name;
}
可以这样写(逻辑同上)
mapped.Name = Model.Model2?.Model3?.Model4?.Name ?? "N/A";
DotNetFiddle.Net工作示例。
(或空合并运算符不同于?或空条件运算符)。
它也可以在赋值运算符的外侧使用。而不是
Action<TValue> myAction = null;
if (myAction != null)
{
myAction(TValue);
}
它可以简化为:
myAction?.Invoke(TValue);
DotNetFiddle示例:
使用系统;
public class Program
{
public static void Main()
{
Action<string> consoleWrite = null;
consoleWrite?.Invoke("Test 1");
consoleWrite = (s) => Console.WriteLine(s);
consoleWrite?.Invoke("Test 2");
}
}
结果:
测试2
基本上,我已经申请了?。一个接一个的模型。我想知道它是否可以直接应用于模型,还是只适用于导航属性?
的?或左值上的空条件运算符运算符,无论值的类型如何。编译器不关心右边的值是多少。这是简单的编译器魔法(意味着它做了一些你已经可以做的事情,只是在一个简化的为什么)。
举个例子
var a = model?.Value;
就跟说
var a = model == null ? null : model.Value;
在第二种情况下,检查null的计算值与返回的值没有关联。如果左边的值为null,空条件运算符基本上总是返回null。
成员的类型(方法、字段、属性、构造函数)。值
与此无关。
DotNetFiddle示例不起作用的原因是用于的编译器。Net 4.7.2
与支持空条件运算符的c#版本不兼容。将其更改为。Net 5,作品:
https://dotnetfiddle.net/7EWoO5
它是空条件运算符。它基本上意味着:
对第一个操作数求值;如果为null,则停止,结果为null。否则,对第二个操作数求值(作为第一个操作数的成员访问)
在你的例子中,重点是如果a
是null
,那么a?。PropertyOfA
将计算为null
,而不是抛出一个异常——然后将null
引用与foo
(使用字符串的=
重载)进行比较,发现它们不相等,执行将进入if
语句的主体。
换句话说,是这样的:
string bar = (a == null ? null : a.PropertyOfA);
if (bar != foo)
{
...
}
... 除了a
只计算一次。
请注意,这也可以更改表达式的类型。例如,考虑<代码>文件信息。长度。这是一个long
类型的属性,但如果将其与null条件运算符一起使用,则会得到long类型的表达式
:
FileInfo fi = ...; // fi could be null
long? length = fi?.Length; // If fi is null, length will be null
本文向大家介绍双问号(??)运算符在PHP中是什么意思?,包括了双问号(??)运算符在PHP中是什么意思?的使用技巧和注意事项,需要的朋友参考一下 PHP 7添加了新的运算符双问号(??)运算符。在PHP 7中,双问号(??)运算符称为Null合并运算符。 如果它存在且不为NULL,则返回其第一个操作数;否则返回第一个操作数。否则,返回其第二个操作数。从左到右评估。Null合并运算符也可以链形式使
问题内容: 关于使用问号“?”的两个问题 在打印功能的括号内加上冒号“:”运算符:它们是做什么的?另外,有人知道它们的标准术语吗,或者在哪里可以找到有关它们使用的更多信息?我读过它们类似于’if’‘else’语句。 问题答案: 这是三元条件运算符,可以在任何地方使用,而不仅仅是print语句。它有时被称为“三元运算符”,但它不是唯一的三元运算符,而是最常见的一个。 这是Wikipedia的一个很好
问题内容: PHP中的“ =&” /“&=”运算符是什么意思?在哪里可以阅读有关它们的信息? 搜索Google没有帮助。 问题答案: 的缩写,是按位与运算符。 分配$ a作为对$ b 的引用。
问题内容: 我知道出于文档目的注释中的含义,但除此之外又意味着什么?(我通常只会在Google上搜索,但结果中会显示每个非字母符号) 问题答案: 该符号表示Java注释。Java注释的作用是,它为变量,方法,类,接口或其他语言元素添加了特殊的属性。(可以在声明注释时进行配置)。向某事物添加注释时,程序的其他部分可以检查某事物是否具有注释。然后,它可以使用此信息来完成所需的任何工作。 让我举几个例子
问题内容: 除了标准,,和运营商; 但什么是这些均值(,,,)? 又如何操作? in返回正常的余数模量,但是仅当,为什么会这样?怎么办? 又如何操作?它有什么作用? 问题答案: :求幂 :异或(按位) :模数 :除以积分结果(舍弃余数)
问题内容: 运算符在Python中是什么意思,例如l或代码? 在解释器内部如何处理? 它会影响性能吗?是快还是慢? 什么时候有用,什么时候没有? 应该在函数声明中还是在调用中使用它? 问题答案: 单颗星将序列集合解压缩为位置参数,因此你可以执行以下操作: 这将打开元组的包装,使其实际执行为: 双星 只使用字典并因此命名参数来做同样的事情: 你还可以结合: 另请参见Python文档的4.7.4-解包