Присоединяйтесь с интеллектуальными разделителями - PullRequest
1 голос
/ 13 июля 2011

Конечно, написать достаточно просто, но в C # 2010 есть встроенный метод Join (или аналогичный), который добавляет разделитель, только если предыдущий и следующий элементы не равны NULL и не пусты.?

Другими словами, SmartJoin(", ","Hood","Robin") выдаст "Робин Гуда", но SmartJoin(", ", "Robin Hood", string.Empty) выдаст просто "Робин Гуда".

Ответы [ 5 ]

5 голосов
/ 13 июля 2011

Как насчет этого:

public void SmartJoin(string separator, params string[] Items)
{
   String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)).ToArray());
}
1 голос
/ 13 июля 2011

Нет встроенного объединения, которое вам нужно.

0 голосов
/ 28 июля 2013

NotherDev был прав, строго говоря, такого встроенного метода нет, но решение @CodingGorila все же помогло мне, и его должен был добавить мой аккаунт в следующую версию .NET, хотя я все же превратил его в статическую функцию. и пусть он вернет строку, чтобы она работала в моей ситуации:

public static string SmartJoin(string separator, params string[] Items) {
    return String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)));
}
0 голосов
/ 28 июля 2013

NotherDev был прав, строго говоря, такого встроенного метода нет, но решение @CodingGorila все же помогло мне, и его должен был добавить мой аккаунт в следующую версию .NET, хотя я все же превратил его в статическую функцию. и пусть он вернет строку, чтобы она работала в моей ситуации:

public static string SmartJoin(string separator, params string[] Items) {
    return String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)).ToArray());
}
0 голосов
/ 14 июля 2011

Вот еще один способ, использующий «агрегатный» метод 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);
}
...