问题标签 [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 投票
5 回答
84062 浏览

c# - 双问号 ('??') vs if 分配相同的 var

参考以下SE 答案

写的时候

它与

这是否意味着

会是首选,性能明智?

或者我可以假设当??符号中存在同一个对象时编译器会优化代码?

0 投票
1 回答
740 浏览

templates - 播放 2.x 空安全合并(避免模板中的 NPE)

在 Play 1.x 中,您可以执行诸如&{task?.server?.name}打印服务器名称(如果存在)或不打印任何内容(如果tasktask.server为空)之类的操作。如何在 2.x scala 模板中获得相同的结果?

我发现了一些关于使用 Scala 执行此操作的问题:

但这些解决方案要么相当冗长,要么需要定义您自己的运算符。Play 是否提供了一种快速的方法来做到这一点?或者如果我需要自己定义运算符,我应该把它放在哪里以便 Play 找到它?(此时我对 Scala 几乎一无所知,尽管我正在努力学习)

0 投票
4 回答
257 浏览

c# - c#空字符串?

我有以下内容:

这返回Tom Jones就好了。

如果 name.First 可能为 null 或 name.Last 可能为 null,我有以下内容:

奇怪的是它只返回Tom。为什么会这样,我该如何修复它,if null使其默认为空字符串的名字或姓氏?

0 投票
2 回答
1125 浏览

c# - 了解空合并运算符 (??)

我有一个WebControl实现.Value返回 Nullable<decimal> 的 getter/setter的自定义

这是一个客户端过滤的文本框(TextBox包含 javascript 和一些用于设置/获取值的服务器端逻辑的子类)

这是该控件的 getter 和 setter:

我看到的问题是该语句的输出:

uxAmount.Value当返回 10000时,我看到金额设置为“0” 。

这按我的预期工作(请原谅外壳的变化):

当调用在 Linq2Sql 数据上下文中定义的 UDF 函数以及空合并运算符时,我也看到了这种行为(最近),也就是说,我知道我的 UDF 调用返回了预期值,但我得到的是 RHS 值。

让我更加困惑的是,如果我在手表中评估 uxAmount.Value,我会得到 10000 的类型Nullable<decimal>

以下是我尝试过的一些表达方式:

然后我在上面 4 之后添加了这个表达式

现在

似乎最后一次调用总是 0,但是(根据上面的 getter/setter 使用 auxAmount.Value解析出来的值是稳定的。我在断点处停止,没有其他线程可以操纵这个值。.TextTryParse

请注意使用 M 后缀将常量强制为十进制,因为它是整数,我怀疑存在类型转换问题。

有任何想法吗?

LHS 和 RHS 的值似乎都是稳定且已知的。

--edit-- 一些来自 VS2010 的屏幕截图

单步执行显示 amount3 值的代码

观看对话框和有关变量状态的更多详细信息

0 投票
3 回答
369 浏览

c# - 在 C# 中是否可以重载 `??` 运算符?

我阅读了有关运算符重载的MSDN 文档。

在该示例中,使用的运算符是+-也可以定义其他运算符*/

我想重载??运算符以用于字符串,例如

代替

不想将字符串转换为对象并使用??.

我知道它??用于可空值类型,MSDN 说:

这 ??运算符称为空值合并运算符,用于为可空值类型或引用类型定义默认值。

如果操作数不为空,则返回左侧操作数;否则返回正确的操作数。

我想问你是否可以在 C# 中重载这个运算符。上面的例子是需要使用时的简单情况??

0 投票
1 回答
122 浏览

asp.net - 在多个模块上保持(http)上下文

我有一个带有静态函数的类,需要使用当前的HttpContext. 我没有在每次使用这些函数时都发送对象,而是尝试了一种不同的方法。我建立了这样一个属性:

在我http用作我的HttpContext.

它似乎不稳定的东西。这有什么问题吗?

更新: 我发现这很好用

请解释

0 投票
3 回答
246 浏览

c# - 空合并运算符

我有以下代码:

由于两者ab都已填写,我希望c给我4的结果。

但是,我得到的结果是2,在这种情况下b被视为1而不是2

有谁知道这种行为背后的原因是什么?

0 投票
6 回答
1615 浏览

c# - C# ??空合并运算符 LINQ

当我使用 LINQ 将 XML 文件解析为自定义对象时,我试图防止出现 NULL 值。

我在Scott Gu 的博客上找到了一个很好的解决方案,但由于某种原因,它不适用于我的整数。我想我使用了相同的语法,但似乎我遗漏了一些东西。哦,由于某种原因,它在节点不为空时起作用。

下面是我的代码的摘录。

错误消息是:

输入字符串的格式不正确。

如果有人知道我做错了什么,请帮忙:)

编辑:一段 XML(奇怪的名字,但不是自愿选择的)

0 投票
2 回答
4877 浏览

c# - 哪个工作得更快 Null coalesce ,三元或 If 语句

我们用?? 运算符针对空值评估表达式,例如:

我们还使用了一个if语句,如果与上面的表达式一起使用,它的工作原理是一样的

还有?: 三元运算符...

我知道空值合并在语法上是精确的,但是两者之间哪个编译得更快并且执行得更快,为什么?

0 投票
4 回答
478 浏览

c# - “如果”条件比 ?? 和铸造

对于相同的功能,我有以下两种方法 - 一种带有“if”条件,一种带有“?? 和铸造”。哪种方法更好?为什么?

代码:

更新

根据答案,以下是 ??

  1. 提高可读性
  2. 减少程序流的分支深度(降低圈复杂度)

注意:作为对象的铸造成本可以忽略不计。

参考

  1. 空合并运算符 - 为什么要强制转换?