Скажем, у меня есть список объектов, и объект имеет свойство string. Я хочу получить список разделенных запятыми значений каждого свойства строки для каждого объекта в списке. Вот 1 способ сделать это (без Linq)Другой вопрос Linqification
StringBuilder result = new StringBuilder()
foreach(myObject obj in myList)
{
result.Append(obj.TheString);
result.Append(", ");
}
// then trim the trailing ", " and call ToString() on result, etc, etc...
Вот мой первый выстрел в linqification. Есть ли способ лучше?
string result = string.Join(", ", myList.Select(myObj => myObj.TheString).ToArray());
Это одна строка кода, но это не выглядит очень эффективным для меня - перебирать список просто построить массив, только для перебора массива и построить строку ... гмм!
Есть ли лучший способ?
+1 На самом деле наслаждайтесь ответами, которые показывают, что может сделать Linq! Это завораживает меня, вы можете установить тип результата в StringBuilder (конечно, после удаления .ToString()) и установить точку останова, и найти оценку Linq, которая была сделана до того, как вы конвертируете в строку ... что добавляет к моей путанице -called 'отложенная оценка' в Linq ... но это не ваша проблема! :) Я завернул ваше решение в методе, а затем использовал StringBuilder.Remove, чтобы избавиться от последнего дополнительного пространства и запятой перед преобразованием в строку. Будем экспериментировать с превращением этого в метод расширения. Благодаря ! – BillW
Отложенная оценка отложена для создания 'StringBuilder', но сам' StringBuilder' не откладывается - хотя ничто не мешает писать ленивый 'StringBuilder' (и, теоретически, вполне возможно, что основные строки также ленивы, хотя для чего потребуется поддержка CLR). –