Как Построить строку из коллекции имен

У меня есть набор имен, которые мне нужно объединить в строку, разделенную запятыми.

Сгенерированная строка должна соответствовать правильной грамматике.

Если коллекция содержит одно имя, то на выходе должно быть только это имя:

John

Если коллекция содержит два имени, тогда вывод должен быть разделен словом «и»:

John and Mary

Если коллекция содержит три или более имен , тогда вывод должен быть разделен запятыми, а перед фамилией должно стоять слово «и»:

John, Mary, and Jane

Вот код, который я придумал. Это не очень элегантно, и я хотел бы знать, есть ли лучший способ сделать это в C # (4.0 в порядке).

List<string> firstNames = new List<string>();
firstNames.Add("John");
firstNames.Add("Mary");
firstNames.Add("Jane");

string names = string.Empty;
for (int i = 0; i < firstNames.Count; i++)
{
    if (i == 1 && firstNames.Count == 2)
    {
        names += " and ";
    }
    else if (firstNames.Count > 2 && i > 0 && i != firstNames.Count - 1)
    {
        names += ", ";
    }
    else if (i != 0 && i == firstNames.Count - 1)
    {
        names += ", and ";
    }

    names += firstNames[i];
}
6
задан Avalanchis 22 June 2011 в 20:06
поделиться