Objekteigenschaft für alle, oder einen Teil der Objekte in einer Auflistung setzen

05/04/2009 - 09:40 von Carsten Ilwig | Report spam
Hi,

gibt es einen "eleganten" Weg um eine Objekteigenschaft für alle Objekte in
einer Auflistung direkt zu setzen,
also ohne eine Schleife zu durchlaufen?
Ich bilde mir ein, irgendwo schon mal so etwas gelesen zu haben, mir fàllt
die Lösung aber nicht mehr ein.

Beispiel:

public class Mitarbeiter
{
public string Name;
public int Alter;
public bool IsMitarbeiter;

public Mitarbeiter()
{
Name = string.Empty;
Alter = 0;
IsMitarbeiter = false;
}
}

List<Mitarbeiter> mitarbeiter = new List<Mitarbeiter>();
mitarbeiter.AddRange(.); //Hier werden ein paar Mitarbeiter der
Auflistung hinzugefügt.

Wenn ich jetzt für alle Mitarbeiter in der Auflistung z.Bsp. den Wert
'IsMitarbeiter' auf TRUE setzen möchte,
kann ich das natürlich ganz 'normal' mit Hilfe einer foreach-Schleife
machen:

foreach (Mitarbeiter _entry in mitarbeiter)
_entry.IsMitarbeiter = true;

Aber da wir ja jetzt Lambda-Expresseions und LINQ for Objects haben, muss
das doch auch irgendwie auch 'eleganter" gehen?
z.Bsp. so:

mitarbeiter.SetValue(p => p.IsMitarbeiter = true); //Nur leider gibt es
keine 'SetValue()-Methode'.

Und als Sahnehàubchen, das Ganze dann noch in Zusammenhang mit einem Filter.

Vielen Dank für Eure Hilfe
Carsten
 

Lesen sie die antworten

#1 Frank Dzaebel
05/04/2009 - 10:24 | Warnen spam
mitarbeiter.All(m => m.IsMitarbeiter = true);



semantisch exakter ist an der Stelle:
mitarbeiter.ForEach(m => m.IsMitarbeiter = true);

Da Du auch nach "einem Teil der Objekte" fragst,
hier ein Beispiel für einen Filter:
mitarbeiter.Where(m=>m.Alter >= 42).All(m => m.IsMitarbeiter = true);

[Lambda-Ausdrücke (C#-Programmierhandbuch)]
http://msdn.microsoft.com/de-de/lib...97687.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen