Nat*_*Pet 0 c# operator-precedence null-coalescing-operator
我有以下内容:
string Name = name.First + " " + name.Last;
Run Code Online (Sandbox Code Playgroud)
这Tom Jones很好.
如果name.First可能为null或name.Last可能为null,我有以下内容:
string SpeakerName = name.First ?? string.Empty + " " + name.Last ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)
奇怪的是它只会返回Tom.为什么这个以及如何修复它以if null使其默认为空名字符串为姓或名?
Chr*_*ain 12
因为??的相对优先权 和+运营商.试试这个:
string SpeakerName = (name.First ?? "") + " " + (name.Last ?? "");
Run Code Online (Sandbox Code Playgroud)
您的原始示例正在评估它是否:
string SpeakerName = name.First ?? ("" + " " + (name.Last ?? ""));
Run Code Online (Sandbox Code Playgroud)
另外,请阅读Jon的答案:C#null-coalescing(??)运算符的运算符优先级是什么?
正如他在那里建议的那样,这也应该有效:
string SpeakerName = name.First + " " + name.Last;
Run Code Online (Sandbox Code Playgroud)
因为这会编译成@ LB的答案,减去修剪:
string SpeakerName = String.Format("{0} {1}", name.First, name.Last)
Run Code Online (Sandbox Code Playgroud)
编辑:
您还要求第一个和最后一个== null使结果为空字符串.通常,这可以通过调用.Trim()结果来解决,但这并不完全等效.例如,如果名称不为空,您可能由于某种原因想要前导或尾随空格,例如"Fred"+"Astair"=>"Fred Astair".我们都假设你想要修剪它们.如果你不这样做,那么我建议使用一个条件:
string SpeakerName = name.First + " " + name.Last;
SpeakerName = SpeakerName == " " ? String.Empty : SpeakerName;
Run Code Online (Sandbox Code Playgroud)
如果你不想要前导或尾随空格,只需添加一个.Trim()@LB
string SpeakerName = String.Format("{0} {1}", name.First, name.Last).Trim();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |