因为 ?? 的相对优先级 和 + 运算符。尝试这个:
string SpeakerName = (name.First ?? "") + " " + (name.Last ?? "");
您的原始示例正在评估,就好像它是:
string SpeakerName = name.First ?? ("" + " " + (name.Last ?? ""));
另外,请在此处阅读 Jon 的回答:C# null-coalescing (??) 运算符的运算符优先级是什么?
正如他在那里建议的那样,这也应该有效:
string SpeakerName = name.First + " " + name.Last;
因为这编译为@LB下面的答案,减去修剪:
string SpeakerName = String.Format("{0} {1}", name.First, name.Last)
编辑:
您还要求 first 和 last 都 == null 使结果为空字符串。通常,这可以通过调用.Trim()
结果来解决,但这并不完全等效。例如,如果名称不为空,您可能出于某种原因需要前导或尾随空格,例如“Fred”+“Astair”=>“Fred Astair”。我们都认为你会想要修剪这些。如果你不这样做,那么我建议使用条件:
string SpeakerName = name.First + " " + name.Last;
SpeakerName = SpeakerName == " " ? String.Empty : SpeakerName;
如果您从不想要前导或尾随空格,只需.Trim()
像 @LB 一样添加