问题标签 [null-propagation-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 空条件运算符“取消”数组元素的存在
新的 C# 6.0 空条件运算符是编写更简洁和更少复杂代码的便捷工具。假设一个客户有一组客户,那么如果为 null ,则可以使用此方法获得 null 而不是长度(来自MSDNcustomers
的示例):
同样,您可以通过以下方式获得 null 而不是客户:
对于更详细的表达式,如果customers
为 null、第一个客户为 null 或第一个客户的Orders
对象为 null,则生成 null:
但是还有一个有趣的案例,即空条件运算符似乎没有解决的不存在的客户。我们在上面看到覆盖了一个空客户,即如果customers
数组中的条目为空。但这与不存在的客户截然不同,例如5
在 3 元素数组中查找客户或n
在 0 元素列表中查找客户。(请注意,同样的讨论也适用于字典查找。)
在我看来,空条件运算符只专注于否定 NullReferenceException 的影响;IndexOutOfRangeException 或 KeyNotFoundException 是孤独的,暴露的,蜷缩在角落里,需要自生自灭!我认为,本着空条件运算符的精神,它也应该能够处理这些情况......这导致了我的问题。
我错过了吗?空条件是否提供任何优雅的方式来真正覆盖这个表达式......
...当没有第零个元素时?
c# - 空条件运算符,在某些机器上的行为不符合预期
我在 WebApi 2 项目的 DelegatingHandler 中有以下代码。
在我的机器上,这可以按预期工作,并且在 301 重定向响应期间(其中 result.content 将为空),我得到 responseContent == null; 但是,在同事的机器上,他在这一行收到了一个空引用异常。我们都使用 4.5.1 运行时,据我们所知,差异如下:
- 我正在使用 VS2015 Enterprise SP2(它可以工作),他正在使用 VS2015 Professional SP2(它不工作)
Ninja Edit -我安装的 .NET 版本和服务包以及他安装的那些......
看起来它不工作的机器安装了两个我没有安装的 4.5.1 安全更新(KB2901126和KB2931368),其中一个会导致这个问题吗?我需要检查的编译器或编译器选项是否存在差异?还是我在寻找一些解释更简单的东西?
roslyn - 罗斯林 C#6 ?. 泛型类型中的运算符编译看起来很乱
让我们考虑以下类定义:
毕竟,一些注释:
MyClass<T>
不要对T
类型施加任何限制 - 所以,T
可以是 aclass
或 astruct
;c2() == c1(t)
必须始终正确。- 我使用http://tryroslyn.azurewebsites.net/网站编译一些代码片段,看看 Roslyn 发出了什么。
现在,让我们分析一下 Roslyn 是如何编译的MyClass<T>
:
1.) c1(T)
案例:
没想到,通过 Roslyn 编译器验证生成的代码后,我们可以看到以下内容:
2.) c2()
案例:
我期望的是与 c1(T) 相同的代码。但是,我看到的是:
哇,为什么会发出所有不必要的代码?在发布编译模式下,我们可以看到C1 的代码大小为 39 字节,而C2 方法的代码大小为 68 字节。这是可以优化的东西吗?
c# - C# 6 空条件检查
如何将其转换为 C# 6 Null 条件检查?
其中 TotalLengthInSeconds 可以为空短
javascript - JavaScript 是否有类似于在 C# 中操作的 null 传播?
我有很多类似的 JavaScript
而且我想知道是否存在语法可以使它更紧凑(即使它是某种“黑客”)。
c# - o?.Value 的表达式树
我想使用表达式树生成这个句子:
o
是任何类的实例。
有什么办法吗?
c# - 为什么 Nullable 的空传播返回 T 而不是 Nullable?
考虑以下代码:
空传播返回T
,而不是Nullable<T>
。
如何以及为什么?
c# - 空值检查先验条件语句的空值传播替换
看到类似的问题后,我想知道以下表达式是否...
...与以下空传播变体的行为(几乎)相同?
到目前为止,我只能确定以下(某种程度上)差异:
input
如果是不可为空的类型,则不可能- 万一
input
是它自己null
,行为就会改变
我错过了什么吗?还是在行为上有其他差异?
编辑:最后,我为第一个片段找到的唯一故障安全替代方案是:
c# - 为什么 null 传播不一致地传播 Nullable?
我特别提请注意空传播,因为它与返回方法bool?
的使用有关。bool
例如,考虑以下情况:
这不会编译,并且存在以下错误:
不能隐式转换布尔?布尔值。存在显式转换(您是否缺少演员表)?
这意味着它将方法的整个主体视为 a bool?
,因此我假设我可以.GetValueOrDefault()
在 the 之后说,.Any()
但这不允许作为.Any()
return bool
not bool?
。
我知道我可以执行以下任一操作作为解决方法:
或者
或者
我的问题是,为什么我不能直接在调用.GetValueOrDefault()
中调用链接.Any()
?
我认为这是有道理的,因为价值实际上是bool?
在这一点上,而不是bool
.
c# - .NET Native 代码在构造函数上崩溃?.Invoke()(空传播)
在为一天的大部分时间挠头之后,我偶然发现了一个非常奇怪的问题,即使用 .NET Native(用于 Windows UWP 应用程序)编译的 .NET 代码。
以下代码在任何 .NET 运行时环境中都可以正常工作,包括 Mono、Xamarin 等:
在具有 .NET Native 编译的 Windows UWP 上,代码会引发类型异常NotImplementedException
但是,当删除空传播运算符时,它可以在 .NET Native 上完美运行:
堆栈跟踪中发生异常的行是:
这闻起来像是编译器或运行时中的错误。这里发生了什么?我错过了什么吗?