加入智能分离器

时间:2011-07-13 19:38:11

标签: c# .net string join

当然,编写起来很容易,但在C#2010中,是否存在内置的Join(或类似)方法,如果前一个和下一个元素都是非null且非空,则只会添加一个分隔符?

换句话说,SmartJoin(", ","Hood","Robin")会产生“胡德,罗宾”,但SmartJoin(", ", "Robin Hood", string.Empty)会产生“罗宾汉”。

5 个答案:

答案 0 :(得分:5)

这个怎么样:

public void SmartJoin(string separator, params string[] Items)
{
   String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)).ToArray());
}

答案 1 :(得分:1)

您没有内置连接。

答案 2 :(得分:0)

这是使用linq

的“聚合”方法的另一种方式
string result = new List<string>() { "Hood", "Robin" }.Aggregate(SmartJoin());
string result2 = new List<string>() { "Robin Hood", "" }.Aggregate(SmartJoin());

private static Func<string, string, string> SmartJoin()
{
  return (x, y) => x + (string.IsNullOrEmpty(y) ? "" : ", " + y);
}

答案 3 :(得分:0)

NotherDev是对的,严格来说,没有这样的方法内置,但仍然@CodingGorila解决方案帮助了我,应该通过我的帐户添加到下一个.NET版本,虽然我仍然把它变成静态函数并让它返回一个字符串,使其在我的情况下工作:

public static string SmartJoin(string separator, params string[] Items) {
    return String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)).ToArray());
}

答案 4 :(得分:0)

NotherDev是对的,严格来说,没有这样的方法内置,但仍然@CodingGorila解决方案帮助了我,应该通过我的帐户添加到下一个.NET版本,虽然我仍然把它变成静态函数并让它返回一个字符串,使其在我的情况下工作:

public static string SmartJoin(string separator, params string[] Items) {
    return String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)));
}