С# Список <строкa> для строки с разделителем

Есть ли функция в С# для быстрого преобразования некоторой коллекции в строку и отдельные значения с разделителем?

Например:

List<string> namesstring names_together = "John, Anna, Monica"

Ответ 1

Вы можете использовать String.Join. Если у вас есть List<string>, вы можете сначала вызвать ToArray:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

В .NET 4 вам больше не нужен ToArray, так как есть перегрузка String.Join, которая принимает IEnumerable<string>.

Ответ 2

Вы также можете сделать это с помощью linq, если хотите

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Хотя я предпочитаю синтаксис не linq в ответе Quartermeister, и я думаю, что Aggregate может выполнять медленнее (возможно, больше операций конкатенации строк).

Ответ 3

List<string> targets = new List<string>();

var InboxChecked = true;
var BannerChecked = false;
var EmailChecked = true;

if (InboxChecked)
{
    targets.Add("Inbox");
}

if (BannerChecked)
{
    targets.Add("Banner");
}

if (EmailChecked)
{
    targets.Add("Email");
}

var index = 0;

if (targets.Any())
{
    var aggregate = targets.Aggregate((s1, s2) =>
    {
        return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2;
    });

    // aggregate.Dump();
}

// returns -> Inbox and Email