【问题标题】:c# null string?c#空字符串?
【发布时间】:2012-07-24 18:39:09
【问题描述】:

我有以下:

string Name = name.First + " "  +  name.Last;

这返回 Tom Jones 就好了。

如果 name.First 可能为 null 或 name.Last 可能为 null,我有以下内容:

string SpeakerName = name.First ?? string.Empty + " "  +  name.Last ?? string.Empty;

奇怪的是它只返回Tom。为什么会这样,我该如何解决它,使if null 它默认为空字符串的名字或姓氏?

【问题讨论】:

  • 搜索“运算符优先级”。
  • 跟进hazzik:null+ 运算符一起使用时转换为“”,其中string 的操作数表达式之一。例如name.First + " " + name.Last 在这种情况下会产生相同的输出。同样,string.Format("{0} {1}", name.First, name.Last) 也可以。但是,通常,"First "" Last"" " 仍然不是所需的输出,因此可以查看 ;-)

标签: c# operator-precedence null-coalescing-operator


【解决方案1】:

因为 ?? 的相对优先级和 + 运算符。试试这个:

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;

因为这编译为@L.B. 在下面的答案,减去修剪:

string SpeakerName = String.Format("{0} {1}", name.First, name.Last)

编辑:

您还要求 first 和 last 都 == null 使结果为空字符串。通常,这可以通过在结果上调用 .Trim() 来解决,但这并不完全等效。例如,如果名称不为空,您可能出于某种原因想要前导或尾随空格,例如“弗雷德”+“阿斯泰尔”=>“弗雷德阿斯泰尔”。我们都认为你会想要修剪这些。如果你不这样做,那么我建议使用条件:

string SpeakerName = name.First + " " + name.Last;
SpeakerName = SpeakerName == " " ? String.Empty : SpeakerName;

如果您从不想要前导或尾随空格,只需将.Trim() 添加为@L.B。做了

【讨论】:

    【解决方案2】:
    string SpeakerName = String.Format("{0} {1}", name.First, name.Last).Trim();
    

    【讨论】:

      【解决方案3】:
      string SpeakerName = name.First != null && name.Last != null 
                           ? string.Format("{0} {1}", name.First, name.Last) 
                           : string.Empty;
      

      【讨论】:

      • +1 用于阅读和理解......“这样,如果为 null,它默认为空字符串的名字或姓氏”......我也是这样做的
      【解决方案4】:
      string fullName = (name.First + " "  +  name.Last).Trim();
      

      这适用于其中一个或两个为空,并且不会返回带有前导、尾随或只有空格的字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-30
        • 2017-09-26
        • 1970-01-01
        • 2012-02-08
        • 2011-06-06
        • 2021-07-17
        • 1970-01-01
        相关资源
        最近更新 更多