Da ich hier nicht die Antwort gefunden habe, die ich für die beste Lösung halte, hier mein Weg:
Die Verwendung von "Select" zur Änderung von Daten ist möglich, aber nur mit einem Trick. Jedenfalls ist "Select" nicht dafür gedacht. Es führt die Änderung nur aus, wenn es mit "ToList" verwendet wird, da Linq nicht ausgeführt wird, bevor die Daten benötigt werden. Wie auch immer, die beste Lösung ist die Verwendung von "foreach". Im folgenden Code können Sie das sehen:
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);
;
}
}
}
Vor "foreach" können Sie auch eine linq-Auswahl treffen...
1 Stimmen
Das tut mir leid! Hier ist die richtige Adresse: robvolk.com/
1 Stimmen
Siehe auch: stackoverflow.com/questions/47836019/
2 Stimmen
Dies ist zwar möglich, wie die Antworten zeigen, aber beachten Sie bitte, dass dies gegen die Natur von LINQ verstößt. LINQ-Methoden sollen keine Seiteneffekte verursachen, so dass diese Vorgehensweise nicht dem Prinzip der geringsten Überraschung entspricht. Gemäß LINQ würden Sie die Objekte abrufen und sie dann ändern.