问题标签 [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.
c# - 可空类型的优雅模式
我有以下构造:
我知道如果f
是以下成员可以使用的简单模式x
:MyType y = x.?f();
有没有类似的方法可以在不改变定义的情况下简化上述代码f
?
c# - 空条件运算符和 CA2202:不要多次处理对象
具有以下内容:
在 Visual Studio 2015 中触发CA2202(不要多次处理对象)警告。
但是,如果将fianlly
块更改为:
这是块中空条件运算符的一些奇怪之处finally
还是什么,或者Visual Studio中的分析工具根本不理解它?
c# - 如何为类似于空条件运算符的集合创建空条件运算符?
C# 6.0 引入了空条件运算符,大获全胜。
现在我想要一个行为类似于它的运算符,但用于空集合。
现在如果Where
返回一个空IEnumerable
,这会爆炸,因为如果集合为空, MinBy
(from MoreLinq
) 会引发异常。
在 C# 6.0 之前,这可能会通过添加另一个扩展方法 MinByOrDefault
来解决。
我想像这样重写它:.Where(...)?.MinBy(...)
. 但这不起作用,因为.Where
返回一个空集合而不是null
.
现在这可以通过引入.NullIfEmpty()
扩展方法来解决IEnumerable
。到达.Where(...).NullIfEmpty()?.MinBy()
。
最终这似乎很尴尬,因为返回空集合总是比返回null
.
有没有其他更优雅的方式来做到这一点?
c# - 铸造调用链中的 Elvis 运算符
elvis 运算符,又名空条件运算符,非常酷。
在 LINQ 查询中,它与空合并“??”配合使用效果很好。操作员。
但是如果你需要转换中间值怎么办?
对于链条中的一个环节,效果很好。
但是通过额外的必要演员表,演员表和调用被“分开”。
可能在这里不止一次弄乱了括号,但我希望你明白。
虽然这个“trainwreck”调用链是一种代码味道,但有没有一种更具表现力的方式来提高简洁性和清晰度?
c# - 是否“?” 除了检查 null 之外,操作员还能做什么?
您可能知道,DateTime?
没有参数化ToString
(用于格式化输出),并且执行类似的操作
会抛出
方法“ToString”没有重载需要 1 个参数
但是,由于 C# 6.0 和 Elvis ( ?.
) 运算符,上面的代码可以替换为
哪个....有效!为什么?
c# - 有人可以使用 C# 6.0 解释优先规则吗?运算符与 ?? 和算术运算?
鉴于以下摘录:
结果是 0,我无法理解这里发生的实际操作。
我原以为结果会是 10,而不是考虑到我理解的运算符的优先级:
- ?. 首先被评估
- -运算符应该评估下一个,因为它的优先级高于 ??
- ?? 应该最后评估。
到底是怎么回事?
c# - 在检查条件时,空条件是否可能不返回可为空的值类型?
当从一个空条件赋值时,返回一个可以为空的值类型是有意义的。否则,如果对象为 null,则 null 条件将返回值类型的默认值,而您不希望这样。因此,这很好:
但是,如果我只是检查一个条件,为什么它会返回一个可为空的类型?你会认为编译器可以很好地解决这个问题:
毕竟,它只是编译到这个,对吧?
为了让它工作,我必须这样做:
在额外的代码和必须将表达式包装在括号中之间,空条件的简写语法的整个目的似乎被打败了。这是处理空条件返回值的正确方法,还是有另一种不涉及可空返回值的方法?
c# - 是 C# 6 吗?(Elvis op) 线程安全吗?如果是这样,怎么做?
提前道歉:这个问题来自一个试图学习高级 C# 的铁杆、未改革的 C++ 开发人员。考虑以下:
这显然不是线程安全的。另一方面,我看过两个说 ? 的教程。(空条件运算符或“猫王运算符”)例如,
是线程安全的。除非编译器在封面下包裹了一个 [mutex?] 锁(颤抖),否则我不明白这怎么可能是真的。如果这个成语是线程安全的,有人可以指出我是如何完成的技术描述吗?如果它不是线程安全的,是否有人有参考实际上说它不是?
c# - 在赋值左侧使用空条件运算符
我有几页,每页都有一个名为Data
. 在另一个页面上,我将这些数据设置为:
是否有可能在 上使用空条件运算符MyPage
?我在想这样的事情:
但是当我这样写时,我收到以下错误:
赋值的左侧必须是变量、属性或索引器。
我知道这是因为MyPage
可能为 null 并且左侧不再是变量。
并不是我不能像我已经拥有它那样使用它,而是我只想知道是否有可能在此使用空条件运算符。