为什么LastName不在下面的C#string concat运算符中显示

时间:2017-04-11 14:57:25

标签: c#

我有以下代码添加??运算符导致最后消失。

预期结果:是,如果第一个为空,则第一个将替换为""那""最后将最后最后结合起来作为结果。

实际结果:我所得到的结果只是第一次

var first = "Joe";
var last = "Smith"
var str1 = first + last; // gives "JoeSmith"
var str2 = first ?? "" + last // gives "Joe"

3 个答案:

答案 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"