空合并赋值运算符的行为

Fur*_*ürk 3 c# .net-core c#-8.0

我只是想知道??=运算符如何在后台运行。我有两个问题。

考虑下面的例子,

string name = "John";
name ??= "George";
Run Code Online (Sandbox Code Playgroud)

1)是否等于name = name ?? "George";

2) 它是这样工作的吗,

if (name == null) {
   name = "George";
}
Run Code Online (Sandbox Code Playgroud)

或者

if (name == null) {
   name = "George";
}
else {
   name = name;
}
Run Code Online (Sandbox Code Playgroud)

Sal*_*ari 8

它将被评估为:

string text = "John";
if (text == null)
{
    text = "George";
}
Run Code Online (Sandbox Code Playgroud)

您可以使用sharplab来查看实际发生的情况:

https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgBQCU+hxTUcADOgHYCGAtgKboAvOgBEAKQD2ACw4iA3Mm790AfhXCRAcT4SATgHM+80xQC

更多信息:https : //stackoverflow.com/a/59300172/2946329

基于文档

C# 8.0 引入了空合并赋值运算符 ??=。仅当左侧操作数的计算结果为 null 时,您才可以使用 ??= 运算符将其右侧操作数的值分配给其左侧操作数。

  • @FurkanÖztürk:请不要在一个问题中提出两个问题。正如您刚刚发现的,通常发生的情况是只有其中一个得到答复。如果您有两个问题,请发布两个不同的问题。 (6认同)