由于相对优先的??和+运营商。试试这个:
string SpeakerName = (name.First ?? "") + " " + (name.Last ?? "");
你原来的例子正在评估,如果它是:也
string SpeakerName = name.First ?? ("" + " " + (name.Last ?? ""));
,阅读Jon的答案在这里:What is the operator precedence of C# null-coalescing (??) operator?
由于他认为在那里,这应该工作以及:
string SpeakerName = name.First + " " + name.Last;
因为编译到@ LB的回答如下,减去修剪:
string SpeakerName = String.Format("{0} {1}", name.First, name.Last)
编辑:
你还问我是第一个和最后两== NULL,使得结果为空字符串。通常,通过对结果调用.Trim()
可以解决这个问题,但这不完全相同。例如,如果名称不为空,例如,您可能由于某种原因想要前导空格或尾随空格。 “Fred”+“Astair”=>“Fred Astair”。我们都假设你想修剪掉这些。如果你不这样做,那么我会建议使用条件:
string SpeakerName = name.First + " " + name.Last;
SpeakerName = SpeakerName == " " ? String.Empty : SpeakerName;
如果您不希望的开头或结尾的空格,只需添加一个.Trim()
为@ L.B。做
搜索“运算符优先级”。 – zzzzBov 2012-07-24 18:40:21
?? “”是不需要的。 – hazzik 2012-07-24 18:41:07
要跟踪hazzik:''null'在与'+'运算符一起使用时转换为“”字符串的操作数表达式之一。例如'name.First +“”+ name.Last'在这种情况下会产生相同的输出。同样,'string.Format(“{0} {1}”,name.First,name.Last)'会起作用。但是,通常,“First”或“Last”或“”“'仍然不是所需的输出,因此可以查看;-) – 2012-07-24 18:46:41