问题标签 [null-conditional-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 投票
2 回答
197 浏览

c# - 可空类型的优雅模式

我有以下构造:

我知道如果f是以下成员可以使用的简单模式xMyType y = x.?f();

有没有类似的方法可以在不改变定义的情况下简化上述代码f

0 投票
2 回答
465 浏览

c# - 空条件运算符和 CA2202:不要多次处理对象

具有以下内容:

在 Visual Studio 2015 中触发CA2202(不要多次处理对象)警告。

但是,如果将fianlly块更改为:

这是块中空条件运算符的一些奇怪之处finally还是什么,或者Visual Studio中的分析工具根本不理解它?

编辑:可能相关:为什么在使用带有 Dispose() 的空条件运算符时代码分析会标记我?

0 投票
2 回答
446 浏览

c# - 如何为类似于空条件运算符的集合创建空条件运算符?

C# 6.0 引入了空条件运算符,大获全胜。

现在我想要一个行为类似于它的运算符,但用于空集合。

现在如果Where返回一个空IEnumerable,这会爆炸,因为如果集合为空, MinBy(from MoreLinq) 会引发异常。

在 C# 6.0 之前,这可能会通过添加另一个扩展方法 MinByOrDefault来解决。

我想像这样重写它:.Where(...)?.MinBy(...). 但这不起作用,因为.Where返回一个空集合而不是null.

现在这可以通过引入.NullIfEmpty()扩展方法来解决IEnumerable。到达.Where(...).NullIfEmpty()?.MinBy()

最终这似乎很尴尬,因为返回空集合总是比返回null.

有没有其他更优雅的方式来做到这一点?

0 投票
1 回答
853 浏览

c# - 铸造调用链中的 Elvis 运算符

elvis 运算符,又名空条件运算符,非常酷。

在 LINQ 查询中,它与空合并“??”配合使用效果很好。操作员。

但是如果你需要转换中间值怎么办?

对于链条中的一个环节,效果很好。

但是通过额外的必要演员表,演员表和调用被“分开”。

可能在这里不止一次弄乱了括号,但我希望你明白。

虽然这个“trainwreck”调用链是一种代码味道,但有没有一种更具表现力的方式来提高简洁性和清晰度?

0 投票
3 回答
2856 浏览

c# - 是否“?” 除了检查 null 之外,操作员还能做什么?

您可能知道,DateTime?没有参数化ToString(用于格式化输出),并且执行类似的操作

会抛出

方法“ToString”没有重载需要 1 个参数

但是,由于 C# 6.0 和 Elvis ( ?.) 运算符,上面的代码可以替换为

哪个....有效!为什么?

0 投票
2 回答
223 浏览

c# - 有人可以使用 C# 6.0 解释优先规则吗?运算符与 ?? 和算术运算?

鉴于以下摘录:

结果是 0,我无法理解这里发生的实际操作。

我原以为结果会是 10,而不是考虑到我理解的运算符的优先级:

  1. ?. 首先被评估
  2. -运算符应该评估下一个因为它的优先级高于 ??
  3. ?? 应该最后评估。

到底是怎么回事?

0 投票
2 回答
53 浏览

c# - 在检查条件时,空条件是否可能不返回可为空的值类型?

当从一个空条件赋值时,返回一个可以为空的值类型是有意义的。否则,如果对象为 null,则 null 条件将返回值类型的默认值,而您不希望这样。因此,这很好:

但是,如果我只是检查一个条件,为什么它会返回一个可为空的类型?你会认为编译器可以很好地解决这个问题:

毕竟,它只是编译到这个,对吧?

为了让它工作,我必须这样做:

在额外的代码和必须将表达式包装在括号中之间,空条件的简写语法的整个目的似乎被打败了。这是处理空条件返回值的正确方法,还是有另一种不涉及可空返回值的方法?

0 投票
2 回答
3746 浏览

c# - 是 C# 6 吗?(Elvis op) 线程安全吗?如果是这样,怎么做?

提前道歉:这个问题来自一个试图学习高级 C# 的铁杆、未改革的 C++ 开发人员。考虑以下:

这显然不是线程安全的。另一方面,我看过两个说 ? 的教程。(空条件运算符或“猫王运算符”)例如,

线程安全的。除非编译器在封面下包裹了一个 [mutex?] 锁(颤抖),否则我不明白这怎么可能是真的。如果这个成语是线程安全的,有人可以指出我是如何完成的技术描述吗?如果它不是线程安全的,是否有人有参考实际上说它不是?

0 投票
7 回答
10840 浏览

c# - 在赋值左侧使用空条件运算符

我有几页,每页都有一个名为Data. 在另一个页面上,我将这些数据设置为:

是否有可能在 上使用空条件运算符MyPage?我在想这样的事情:

但是当我这样写时,我收到以下错误:

赋值的左侧必须是变量、属性或索引器。

我知道这是因为MyPage可能为 null 并且左侧不再是变量。

并不是我不能像我已经拥有它那样使用它,而是我只想知道是否有可能在此使用空条件运算符。

0 投票
4 回答
722 浏览

c# - 如何将 Nullable 运算符与 Null 条件运算符一起使用?

老路

新的方法?