使用null-coalescing运算符进行字符串连接

aw0*_*w04 1 c# string-concatenation

我试图建立一个像下面这样的字符串,我注意到它在使用后被切断了?运算符,无论前一个值是否为null.

"Some Text" + System.Environment.NewLine +
varOne.ToString() ?? string.Empty + System.Environment.NewLine +
varTwo.ToString()...
Run Code Online (Sandbox Code Playgroud)

字符串包含的所有内容(无论值是多少)都取决于varOne(Some Text + newline + varOne),除非我删除?? 运营商.看了一下后,我发现这不是首选的方法,我应该使用一个字符串构建器,但我只是好奇为什么会发生这种情况?

Adr*_*der 7

看看?运算符(C#参考)

?? ?? operator被称为null-coalescing运算符,用于为可空值类型或引用类型定义默认值.如果操作数不为null,则返回左侧操作数; 否则返回正确的操作数.

这意味着,??只有在之前的东西为null之前,才会分配后面的东西.

所以

        string sNull = null;
        string s = sNull ?? "TADA";
Run Code Online (Sandbox Code Playgroud)

s 将会 TADA

        string sNull = null;
        string s = sNull ?? "TADA";
        string sNormal = s ?? "NOT TADA";
Run Code Online (Sandbox Code Playgroud)

sNormal 也会 TADA