Есть ли лучший способ сократить этот код или удалить цикл foreach?
var message = string.Empty;
if (myList.Any())
{
foreach (var item in myList)
{
message += $"{item.HusbandFirstName} is married to {item .WifeFirstName}";
}
}
«но в остальном, ИМХО, это нормально». - это точно нет. Вероятно, это второй худший способ сделать это. Просто подумайте, сколько строк это создаст.
@Fildor Какой самый худший способ?
@Fildor, поэтому я сказал, что буду использовать StringBuilder. Под штрафом я имел в виду использование foreach.
@SomeBody, когда вы также += компоненты.
@BillTürstandswithUkraine Хорошо, в таком случае я просто неправильно понял ваше заявление.
Проверка if Any на самом деле мало что добавляет. Повторение пустого списка — это нормально, и оно неявно делает то же самое.
Обратите внимание: ваш код выдает «Джон женат на Джейн, Томас женат на Саре, Ли женат на Ли...» — возможно, это не то форматирование, которое вы предполагали. Возможно, string.Join подойдет вам больше, например. string.Join(", " myList.Select(item => $"{item.HusbandFirstName} is married to {item .WifeFirstName}"))





вы можете использовать LINQ с String.Concat
var message = string.Concat(myList.Select(item => $"{item.HusbandFirstName} is married to {item.WifeFirstName}"));
Используйте String.Join, если хотите использовать разделитель.
var message = string.Join(", ", myList.Select(item => $"{item.HusbandFirstName} is married to {item.WifeFirstName}"));
Просто обратите внимание, что здесь используется разделитель ", ", тогда как в OP разделителя нет.
правда, обновите пост
Вы также можете продолжать использовать «Присоединиться» с помощью string.Join( "", ...). Однако не знаю, будет ли ваш concat-подход работать лучше.
var sb = new StringBuilder();
myList
.ForEach(l => sb.Append($"{l.HusbandFirstName} is married to {l.WifeFirstName}"));
var message = sb.ToString();
В зависимости от того, какую версию .NET вы используете, вы будете использовать более или менее производительные перегрузки, которые будут ограничивать выделение ресурсов и ускорять работу.
Не думаю, что я бы променял foreach на .ForEach
@flackoverstow да, справедливо. просто хотел сделать его короче для ОП. Для полноты картины: каковы недостатки ForEach по сравнению с foreach?
«Сделайте это короче» - 5 символов вряд ли того стоят;) и в итоге вы получаете сбивчивую вещь, предназначенную только для списка, которая выглядит как вещь LINQ, которая становится неприятной по мере увеличения длины. См. также ericlippert.com/2009/05/18/foreach-vs-foreach
Согласованный. Спасибо за ссылку. Он достаточно хорошо перекрывает негативные моменты.
Я бы использовал здесь
StringBuilder, иifна самом деле не нужен, но в остальном, ИМХО, это нормально. Какая у тебя проблема сforeach?