Разделенный запятыми строка из списка элементов


Есть простой способ, чтобы создать разделенные запятыми строку из списка товаров, без добавления лишних ", " в конец строки?

Мне часто нужно взять CheckBoxList с ASP.NET и формат выбранного значения в качестве строки для вставки в сообщение электронной почты. Это просто, чтобы перебрать некоторые флажки, получите значения, и добавить их в класса StringBuilder с себя ", " разделяя их, а свойство count возвращает количество элементов в списке всего, а не количество элементов, которые на самом деле выбраны. Так трудно знать, когда вы достигли последнего пункта, и вы в конечном итоге с шальной ", " на конце.

Я играл вокруг с несколько различных подходов к этой проблеме. В последнее время я делаю что-то вроде этого:

private string ConcatenateCheckBoxListItems()
{
    StringBuilder sb = new StringBuilder();
    char[] characters = new char[] {" ", ","};
    String trimmedString;

    foreach (ListItem item in MyList)
    {
        sb.Append(item.Value + ", ");
    }

    trimmedString = sb.ToString().TrimEnd(characters);
    return trimmedString;
}

Но это определенно неуклюжим. Так что различные подходы петли я пробовал. Какие-либо предложения для более чистого выполнения?



132425
51
задан 3 марта 2011 в 04:03 Источник Поделиться
Комментарии
4 ответа

Это не достаточно?

private string ConcatenateCheckBoxListItems()
{
return string.Join(", ", from item in MyList select item.Value);
}

64
ответ дан 3 марта 2011 в 04:03 Источник Поделиться

Почему не строку.Присоединяйтесь к()?

var result = string.Join(", ", MyList.Items.Select(i => i.Value));

25
ответ дан 3 марта 2011 в 04:03 Источник Поделиться

строку.Присоединяйтесь() - это хороший ответ, но я предпочитаю создать метод расширения:

namespace StringExtensions
{
static class _
{
public static string JoinString<T>(this IEnumerable<T> source, string seperator = "")
{
return string.Join(seperator, source);
}
}
}

который используется так:

return MyList.Select(i => i.Value).JoinString(", ");

(Я использую нетрадиционный метод организации методы расширения, которые вы можете прочитать здесь: http://jbazuzicode.blogspot.com/2009/01/way-to-manage-extension-methods-in-c.html).

5
ответ дан 3 марта 2011 в 11:03 Источник Поделиться

Как НДР отметил, лучше использовать строку.Присоединяйтесь, вместо того, чтобы делать это самостоятельно, как я уже говорил ранее.


Может быть, я что-то упускаю, но не могу
вы просто выполните следующие действия?

private string ConcatenateCheckBoxListItems()
{
StringBuilder sb = new StringBuilder();

for ( int i = 0; i < MyList.Items.Count; ++i )
{
ListItem item = MyList.Items[ i ];
sb.Append( item.Value );
if ( i < MyList.Items.Count - 1 )
{
sb.Append( ", " );
}
}

return sb.ToString();
}



Обновление:

Как заметка на полях, я знаю, что это легко
быстро потерять обзор
намерениях с кодом. Вот почему
Я работаю на экспериментальной
класс, который позволяет сделать
следующее.

StringBuilder sb = new StringBuilder();
Loop loop = Loop.ForEach( MyList.Items, i => sb.Append( i.Value ) );
loop.After.AllButLast( () => sb.Append( ", " ) );
loop.Run();


Я еще не решил, будет ли или не я
нравится такое решение. :) Не использовал его
что часто.

1
ответ дан 3 марта 2011 в 04:03 Источник Поделиться