当然,编写起来很容易,但在C#2010中,是否存在内置的Join(或类似)方法,如果前一个和下一个元素都是非null且非空,则只会添加一个分隔符?
换句话说,SmartJoin(", ","Hood","Robin")
会产生“胡德,罗宾”,但SmartJoin(", ", "Robin Hood", string.Empty)
会产生“罗宾汉”。
答案 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)));
}