在C#中是否有一个优雅/内置的方法来添加一个字符串连接器IFF两个字符串的长度> 0?

时间:2012-04-25 00:38:05

标签: c# string-concatenation

我知道我可以通过扩展程序(我使用StringBuilder)这样做,但是我经常需要它,我觉得必须有更好的方法。假设我正在组合名字和姓氏,其中任何一个都可能丢失(空或空,不关心),如果两者都存在,我只想要一个空格。所以

return firstName + (!string.IsNullOrEmpty(firstName) && !string.IsNullOrEmpty(lastName) ? " " : string.Empty) + lastName;

给了我Joe Smith但从未Joe[trailingspace][leadingspace]Smith

显然这是一个愚蠢的例子,但我在现实世界中经常这样做。有更好的想法吗?

编辑:不建议使用String.Join。它不起作用。 (好吧,除非你把它与LINQ结合起来,就像下面的消费者一样。)

3 个答案:

答案 0 :(得分:3)

我会选择类似的东西:

public static string JoinNonEmpty(string separator, params string[] values)
{
    return 
        string.Join(separator, values.Where(v => !string.IsNullOrEmpty(v)));

}

答案 1 :(得分:1)

在此博客String.Join method?中,您可以创建一个接收数组和分隔符的扩展方法?:

string[] input = {"Joe", null, "Smith"};
return input.Aggregate((x,y)=>String.IsNullOrEmpty(y)?x :String.Concat(x, " ", y));

答案 2 :(得分:0)

我个人会使用string.Format():

var myName = string.Format( "{0}{1}{2}"
                           , firstName
                           , !string.IsNullEmptyOrwhitespace(firstName) && !string.IsNullEmptyOrWhitespace(lastName) ? " " : string.empty
                           , lastName
                           ); 

这不是依赖于LINQ或扩展方法的聪明代码,它是一种标准的,基本的和直接的方法 - 重要的是你可以立即看到发生了什么以及结果应该是什么。如果您希望在许多不同的地方进行相同的操作,使用扩展方法会变得更加相关。

或者,您的数据对象可以封装此逻辑:

public class MyData
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName
    {
        get { /*insert the string.Format() illustrated above */ }
    }
}