Как создать строку из коллекции имен - PullRequest
6 голосов
/ 23 июня 2011

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

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

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

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];
}

Ответы [ 11 ]

0 голосов
/ 23 июня 2011
List<string> firstNames = new List<string>();
firstNames.Add("John");
firstNames.Add("Mary");
firstNames.Add("Jane");

StringBuilder names = new StringBuilder();
for (int i = 0; i < firstNames.Count; i++)
{
    if((i-1) == firstNames.Count && names.length > 0)
         names.AppendFormat(" and {0}", names[i]);
    else if(names.length > 0)
         names.AppendFormat(", {0}", names[i]);    
}
return names.ToString();

Я думаю, что это лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...