【问题标题】:?? null-coalescing operator vs if == null??空合并运算符 vs if == null
【发布时间】:2016-04-02 12:21:45
【问题描述】:

当使用?? null-coalescing 运算符实例化空对象时,与简单的if == null 语句相比,是否存在性能差异、额外循环等?将对象分配给自身有什么影响?

RedColorBrush = RedColorBrush ?? new SolidColorBrush(renderTarget, Color.Red);

对

if (RedColorBrush == null)
{
    RedColorBrush = new SolidColorBrush(renderTarget, Color.Red);
}

【问题讨论】:

  • 您在编译和检查生成的 IL 时发现了什么?
  • 如果有任何差异(这是值得怀疑的),那么它应该是微不足道的,以至于您最关心的应该是可读性/可维护性,而不是可能的微优化。 (甚至可以在下一版本的编译器或 VM 中反转或消失)
  • 我相信原因之一类似于三元运算符:对某些人来说更易读。
  • 我在 ildasm 中打开了.exe,不幸的是什么都看不懂),但我实际上同意@abelenky。

标签: c# if-statement null null-coalescing-operator


【解决方案1】:

根据this post,?? 和?: 运算符实际上可能更快(虽然不是很多),因为这些运算符实际上评估为一个值,而if 语句指向不同的路径行,并可能导致创建另一个本来可以避免的变量。

此外,?? 运算符几乎就像 ?: 的一个特例

编辑:它看起来也更干净,打字也更快。我讨厌一次又一次地重新输入相同的东西,这就是我喜欢 C# 的原因,因为它提供了很多速记选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2023-03-07
    相关资源
    最近更新 更多