问题标签 [null-coalescing-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 投票
3 回答
180 浏览

c# - 检查空值的函数结果

在回答这个问题时,BlackBear 建议替换

如果是一个字符串值,这很好Session["key"]用,但是如果我想对一个对象执行此操作呢?例如,我可以这样做:

但是,如果我不想评估GetMyObject()两次怎么办?我唯一的选择是将结果存储在变量中,然后检查该变量是否为空吗?


编辑:这都是理论上的——我以前遇到过,但我现在没有一个具体的例子。话虽如此,这是一个示例类。

如果我这样做string y = (GetMyObject() ?? "none").ToString();,我会得到

操作员 '??' 不能应用于“MyObject”和“string”类型的操作数”。

理想情况下,我可以做到

即使 GetMyObject() 为空,它也能正常工作。基本上空合并运算符充当自包含的try {} catch (NullReferenceException) {}. 我知道我不能,但那将是理想的。

0 投票
9 回答
399 浏览

c# - C# 合并运算符抛出

我有一个带有字符串属性的类。我在读取它时使用了合并运算符,因为它可能为空,但它仍然给我一个 NullRefrenceExeption。

更具体地说,它的“.ParentSection”是空的,是不是因为它甚至没有“.name”?如果是这种情况,我应该先用 if 块测试“.ParentSection”吗?

我认为 Coalesce 运算符有一些我不明白的地方,希望有人能解释一下这里出了什么问题。

0 投票
2 回答
6741 浏览

c# - 在可空类型上使用合并空运算符会更改隐式类型

我希望接下来的三行代码是相同的:

在所有情况下,我都分配nullableDateTime给新变量。我希望所有变量的类型都成为DateTime?,因为那是nullableDateTime. 但令我惊讶的是,dateTimeWhatTypejust 的类型变成了DateTime,所以不能为空。

更糟糕的是,ReSharper 建议用空合并表达式替换第二个语句,将其转换为表达式 3。因此,如果我让 ReSharper 做它的事情,变量的类型将从DateTime?变为DateTime

事实上,假设在该方法的其余部分,我会使用

这可以编译得很好,直到我让 ReSharper 用空合并版本替换第二个表达式。

AFAIK,替换

确实应该产生相同的结果。但是对于可空类型的隐式类型,编译器似乎威胁??到了它的意思。

所以我想我的问题是为什么在我使用时隐式类型会发生变化??,以及在文档中我可以找到有关此信息的位置。

顺便说一句,这不是真实世界的场景,但我想知道为什么使用??更改(隐式)类型。

0 投票
5 回答
2488 浏览

c# - c#这条线是什么意思?

有人可以解释一下下面的代码return total ?? decimal.Zero吗?

是以下的意思吗?

0 投票
1 回答
2761 浏览

javascript - 如何在 JavaScript/CoffeeScript 中合并数组?

合并一组静态项目很容易:

但是有没有一种简单的方法来合并一个未知长度的数组?我能想到的最简单的是这个(CoffeeScript):

这对于简单的列表很好,但是

  1. 理想情况下coalesce应该迭代arguments,但它不支持reduce,并且
  2. 如果数组包含函数,您可能希望返回它们的返回值而不是函数本身(这是我的用例)。

基于 Guffa 的解决方案,这里有一个 CoffeeScript 版本:

测试coffee

印刷

0 投票
4 回答
2079 浏览

c# - C# 中的空合并运算符 (??) 是线程安全的吗?

以下代码中是否存在可能导致NullReferenceException?

- 或者 -

Callback在 null 合并运算符检查 null 值之后但在调用函数之前,是否可以将变量设置为 null?

编辑

这是一个出于好奇而提出的问题。我通常不会这样编码。

我不担心Callback变量变得陈旧。我担心Exception被扔掉DoCallback

编辑#2

这是我的课:

该方法DoCallbackIfElse有一个竞争条件,可能会抛出一个NullReferenceException. 该DoCallbackCoalesce方法是否具有相同的条件?

这是 IL 输出:

在我看来,call UserQuery+MyClass.get_Callback在使用运算符时只被调用一次??,但在使用if...else. 难道我做错了什么?

0 投票
10 回答
59305 浏览

powershell - Powershell中的空值合并

powershell中是否有空合并运算符?

我希望能够在 powershell 中执行这些 c# 命令:

0 投票
1 回答
3502 浏览

javascript - javascript空条件表达式

可能重复:
javascript 的空合并运算符?

在 C# 中,您可以这样做:

那就是 assign newObjectto objif not null else assign defaultObject。我如何用javascript写这个?

0 投票
1 回答
427 浏览

scala - 是否可以在不使用反射的 Scala 中实现 `??`(来自 C# 的空合并运算符)?

我在某处找到了 C# 空合并运算符'??'的实现:

然后可以像a ?? bwhich mean一样使用它if (a == null) b else a

在反编译类文件后,我看到它生成了带有反射的代码(在 Scala 2.8.1 中)。

为什么它会产生反射,是否可以修改该代码使其不会产生反射?

0 投票
3 回答
1335 浏览

c# - 合并可能为空的 LINQ 查询结果

我使用 Linq 从 4 个级联下拉菜单中返回 ID。

用户可能已经从 1 个或所有菜单中选择了 1 个或多个值。然后从用户的选择中查询代表 ID 的 DataTable 的文本列。

如果用户从第 4 个(也是最低级别)下拉列表中进行选择,那么他们会从上述所有下拉列表中进行选择。

如果用户从菜单 1 中选择“X”,从菜单 2 中选择“Y”,而在其他人中没有任何内容,我希望results1在 [Col_1] 中存在“X”的 10 行中看到,然后会向下查询说results2[Col_2] 中存在“Y”的5 行。

编辑 代码(基本形式)

results4取决于results3results3onresults2results2on的结果results1

可能results4 - 2是空的,因此我想知道是否可以将它们合并为最终变量,例如:

这是抛出错误:

有没有人有任何狡猾的想法如何解决这个问题?我尽量不写冗长的代码,处理所有可能的结果。

提前谢谢大家(希望这个问题是有道理的!)

厘米