Odkąd didn't znaleźć odpowiedź tutaj, które uważam za najlepsze rozwiązanie, tu moja droga
Używanie „Wybierz”, aby zmodyfikować dane jest możliwe, ale tylko z trick. W każdym razie "Wybierz" nie jest do tego stworzone. Po prostu wykonuje modyfikację, gdy jest używana z "ToList", ponieważ Linq nie wykonuje, zanim dane będą potrzebne. W każdym razie najlepszym rozwiązaniem jest użycie "foreach".W poniższym kodzie, można zobaczyć:
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);
;
}
}
}
Przed „foreach”, można także dokonać wyboru linq ...
napisałem metodę rozszerzenia w oparciu o odpowiedzi JaredPar jest poniżej, który pozwala osiągnąć ten używając deklaratywnej składni jak mój przykład. Sprawdź to: http://blog.robvolk.com/2009/05/linq-select-object-but-change-some.html –
@RobVolk, link wydaje się martwy - dostałeś nowy? Oto archiwum - [LINQ: Wybierz obiekt, ale zmień niektóre właściwości bez tworzenia nowego obiektu] (https://web.archive.org/web/20120608052434/http://blog.robvolk.com/2009/05/ linq-select-object-but-change-some.html) – KyleMit
http://blog.robvolk.com/2009/05/linq-select-object-but-change-some.html nie znalezione *** Błąd DNS * ** – Kiquenet