我有以下代码添加??运算符导致最后消失。
预期结果:是,如果第一个为空,则第一个将替换为""那""最后将最后与最后结合起来作为结果。
实际结果:我所得到的结果只是第一次。
var first = "Joe";
var last = "Smith"
var str1 = first + last; // gives "JoeSmith"
var str2 = first ?? "" + last // gives "Joe"
答案 0 :(得分:12)
这是一个优先事项。 +
绑定比??
更紧密,因此您的代码有效:
var str2 = first ?? ("" + last)
听起来你可能意味着:
var str2 = (first ?? "") + last
但是没有意义,因为字符串连接与null相当于字符串连接与空字符串 - 所以只需使用first + last
,因为你已经拥有str1
。
答案 1 :(得分:2)
这是空合并运算符??
的预期行为。它将使用第一个值,除非它为null,在这种情况下它将落到第二个值。考虑如何在替换变量时出现:
var str2 = "Joe" ?? "" + "Smith";
由于“Joe”不为null,因此会将str2
设置为该值并忽略表达式的其余部分。如果您只想合并第一个名称,那么您需要将其与括号分组,以使用空字符串替换first
的任何空实例:
var str2 = (first ?? "") + last;
但是,这与您现有的代码没有任何区别,因为您的null只是一个空字符串并产生相同的东西。
答案 2 :(得分:0)
来自MSDN:
?? operator被称为null-coalescing运算符。如果操作数不为null,则返回左侧操作数;否则它会返回右手操作数。
由于第一个不是null
,它会返回" Joe"