Так как я не нашел здесь ответа, который считаю лучшим решением, вот мой путь:
Использование «Выбрать» для изменения данных возможно, но только с помощью хитрости. В любом случае, «Выбор» не предназначен для этого. Он просто выполняет модификацию при использовании с «ToList», потому что Linq не выполняется до того, как потребуются данные.
В любом случае, лучшее решение - использовать foreach. В следующем коде вы можете увидеть:
class Person
{
public int Age;
}
class Program
{
private static void Main(string[] args)
{
var persons = new List<Person>(new[] {new Person {Age = 20}, new Person {Age = 22}});
PrintPersons(persons);
//this doesn't work:
persons.Select(p =>
{
p.Age++;
return p;
});
PrintPersons(persons);
//with "ToList" it works
persons.Select(p =>
{
p.Age++;
return p;
}).ToList();
PrintPersons(persons);
//This is the best solution
persons.ForEach(p =>
{
p.Age++;
});
PrintPersons(persons);
Console.ReadLine();
}
private static void PrintPersons(List<Person> persons)
{
Console.WriteLine("================");
foreach (var person in persons)
{
Console.WriteLine("Age: {0}", person.Age);
;
}
}
}
Перед "foreach" вы также можете выбрать linq ...