Как добавить каждый элемент в списке строк в C # с помощью лямбда-выражения - PullRequest
5 голосов
/ 08 июня 2011

Я нашел здесь эту версию на VB, но я бы хотел использовать лямбда-выражение, чтобы взять список строк, а затем добавить строку к каждому элементу в списке.

Кажется, что использование ForEach приводит к отправке строки по значению, поэтому любые изменения исчезают. Вот строка кода, которую я надеялся получить.

listOfStrings.ForEach((listItem) => {listItem = listItem.Insert(0,"a");});

Ответы [ 4 ]

19 голосов
/ 08 июня 2011

Строки являются неизменяемыми, их нельзя изменить «на месте». Поэтому вам придется заменить каждую запись в списке, которую вы не можете сделать с List<T>.ForEach. На этом этапе вам лучше всего составить новый список:

listOfStrings = listOfStrings.Select(value => "a" + value).ToList();
4 голосов
/ 08 июня 2011

Если вам нужно изменить список вместо , тогда уместен явный цикл for.

for (int index = 0; index < list.Count; index++)
{
     list[index] = // modify away!
}

В противном случае используйте Select(Func<T, TOut> selector) с необязательным .ToList() или .ToArray(), как показывают шестилетние переменные.

3 голосов
/ 08 июня 2011
List<string> x = new List<string>();
            x.Add("d");

            List<string> res = x.Select(c => "a" + c).ToList();
1 голос
/ 08 июня 2011

Вы можете сделать свое собственное расширение:

public static void ForEachChange<T>(this List<T> List, Func<T, T> Func)
{
    for(int i = 0; i < List.Count; i++)
        List[i] = Func(List[i]);
}

listOfStrings.ForEachChange((listItem) => {return listItem.Insert(0,"a");});

теперь будет работать

Редактировать:
Сейчас работает

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