问题标签 [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.

0 投票
4 回答
11371 浏览

c# - 空条件运算符“取消”数组元素的存在

新的 C# 6.0 空条件运算符是编写更简洁和更少复杂代码的便捷工具。假设一个客户有一组客户,那么如果为 null ,则可以使用此方法获得 null 而不是长度(来自MSDNcustomers的示例):

同样,您可以通过以下方式获得 null 而不是客户:

对于更详细的表达式,如果customers为 null、第一个客户为 null 或第一个客户的Orders对象为 null,则生成 null:

但是还有一个有趣的案例,即空条件运算符似乎没有解决的不存在的客户。我们在上面看到覆盖了一个客户,即如果customers数组中的条目为空。但这与不存在的客户截然不同,例如5在 3 元素数组中查找客户或n在 0 元素列表中查找客户。(请注意,同样的讨论也适用于字典查找。)

在我看来,空条件运算符只专注于否定 NullReferenceException 的影响;IndexOutOfRangeException 或 KeyNotFoundException 是孤独的,暴露的,蜷缩在角落里,需要自生自灭!我认为,本着空条件运算符的精神,它也应该能够处理这些情况......这导致了我的问题。

我错过了吗?空条件是否提供任何优雅的方式来真正覆盖这个表达式......

...当没有第零个元素时?

0 投票
1 回答
589 浏览

c# - 空条件运算符,在某些机器上的行为不符合预期

我在 WebApi 2 项目的 DelegatingHandler 中有以下代码。

在我的机器上,这可以按预期工作,并且在 301 重定向响应期间(其中 result.content 将为空),我得到 responseContent == null; 但是,在同事的机器上,他在这一行收到了一个空引用异常。我们都使用 4.5.1 运行时,据我们所知,差异如下:

  • 我正在使用 VS2015 Enterprise SP2(它可以工作),他正在使用 VS2015 Professional SP2(它不工作)

Ninja Edit -我安装的 .NET 版本和服务包以及他安装的那些......

看起来它不工作的机器安装了两个我没有安装的 4.5.1 安全更新(KB2901126KB2931368),其中一个会导致这个问题吗?我需要检查的编译器或编译器选项是否存在差异?还是我在寻找一些解释更简单的东西?

0 投票
1 回答
120 浏览

roslyn - 罗斯林 C#6 ?. 泛型类型中的运算符编译看起来很乱

让我们考虑以下类定义:

毕竟,一些注释:

  • MyClass<T>不要对T类型施加任何限制 - 所以,T可以是 aclass或 a struct
  • c2() == c1(t)必须始终正确。
  • 我使用http://tryroslyn.azurewebsites.net/网站编译一些代码片段,看看 Roslyn 发出了什么。

现在,让我们分析一下 Roslyn 是如何编译的MyClass<T>

1.) c1(T)案例:

没想到,通过 Roslyn 编译器验证生成的代码后,我们可以看到以下内容:

2.) c2()案例:

我期望的是与 c1(T) 相同的代码。但是,我看到的是:

哇,为什么会发出所有不必要的代码?在发布编译模式下,我们可以看到C1 的代码大小为 39 字节,而C2 方法的代码大小为 68 字节。这是可以优化的东西吗?

0 投票
1 回答
251 浏览

c# - C# 6 空条件检查

如何将其转换为 C# 6 Null 条件检查?

其中 TotalLengthInSeconds 可以为空短

0 投票
1 回答
2467 浏览

javascript - JavaScript 是否有类似于在 C# 中操作的 null 传播?

我有很多类似的 JavaScript

而且我想知道是否存在语法可以使它更紧凑(即使它是某种“黑客”)。

0 投票
1 回答
1462 浏览

c# - o?.Value 的表达式树

我想使用表达式树生成这个句子:

o是任何类的实例。

有什么办法吗?

0 投票
1 回答
152 浏览

c# - 为什么 Nullable 的空传播返回 T 而不是 Nullable?

考虑以下代码:

空传播返回T,而不是Nullable<T>

如何以及为什么?

0 投票
1 回答
810 浏览

c# - 空值检查先验条件语句的空值传播替换

看到类似的问题后,我想知道以下表达式是否...

...与以下空传播变体的行为(几乎)相同?

到目前为止,我只能确定以下(某种程度上)差异:

  • input如果是不可为空的类型,则不可能
  • 万一input是它自己null,行为就会改变

我错过了什么吗?还是在行为上有其他差异?


编辑:最后,我为第一个片段找到的唯一故障安全替代方案是:

0 投票
2 回答
428 浏览

c# - 为什么 null 传播不一致地传播 Nullable?

我特别提请注意空传播,因为它与返回方法bool?的使用有关。bool例如,考虑以下情况:

这不会编译,并且存在以下错误:

不能隐式转换布尔?布尔值。存在显式转换(您是否缺少演员表)?

这意味着它将方法的整个主体视为 a bool?,因此我假设我可以.GetValueOrDefault()在 the 之后说,.Any()但这不允许作为.Any()return boolnot bool?

我知道我可以执行以下任一操作作为解决方法:

或者

或者

我的问题是,为什么我不能直接在调用.GetValueOrDefault()中调用链接.Any()

我认为这是有道理的,因为价值实际上是bool?在这一点上,而不是bool.

0 投票
1 回答
436 浏览

c# - .NET Native 代码在构造函数上崩溃?.Invoke()(空传播)

在为一天的大部分时间挠头之后,我偶然发现了一个非常奇怪的问题,即使用 .NET Native(用于 Windows UWP 应用程序)编译的 .NET 代码。

以下代码在任何 .NET 运行时环境中都可以正常工作,包括 Mono、Xamarin 等:

在具有 .NET Native 编译的 Windows UWP 上,代码会引发类型异常NotImplementedException

但是,当删除空传播运算符时,它可以在 .NET Native 上完美运行:

堆栈跟踪中发生异常的行是:

这闻起来像是编译器或运行时中的错误。这里发生了什么?我错过了什么吗?