【问题标题】:What is the double question mark equals sign (??=) in C#? [duplicate]C# 中的双问号等号 (??=) 是什么? [复制]
【发布时间】:2021-11-09 20:57:25
【问题描述】:

我经常看到这样的说法:

int? a = 5;

//...other code

a ??= 10;

第二行中的??= 是什么意思?我以前见过?? 用于空值合并,但我从未见过它与等号一起使用。

【问题讨论】:

  • 在这里使用var 是模棱两可的,因为读者无法知道您的意思是int 还是int?。前者会使a ??= 10 无用。
  • 我不确定是否要标记这个...鉴于您在打开它的几秒钟内回答了这个问题,而且它显然是重复的,看起来您打开它只是为了获得一些支持(您不要因为接受自我回答而得到任何代表)
  • @canton7 好吧,我一直在搜寻这个问题的答案,直到我在 MSDN 中遇到文档时才找到它。链接的答案是第一个出现的,但它甚至不包含文本??=,也没有在这里回答问题。我通过选中问题区域下的“回答您自己的问题”复选框回答了我自己的问题。
  • @canton7 我弄错了。经过一番滚动,我发现那里有一个现有的答案! stackoverflow.com/a/60620993/1439748
  • 好吧,对于(几乎?)所有运算符而言,x op= yx = x op y 相同(尽管 x 仅被评估一次)。我的怀疑只是你自己直接回答了,所以你发布了一个你已经知道答案的问题

标签: c# conditional-operator equals-operator


【解决方案1】:

和这个是一样的:

if (a == null) {
  a = 10;
}

它是 C# 8.0 中引入的运算符:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator

在 C# 8.0 及更高版本中可用,null 合并赋值运算符 ??= 仅当左侧操作数的计算结果为 null 时,才将其右侧操作数的值分配给其左侧操作数。如果左侧操作数的计算结果为非 null,则 ??= 运算符不会计算其右侧操作数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2021-07-23
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多