Laden...

group.Users.Contains(userX) - wie implementieren?

Erstellt von Golo Roden vor 14 Jahren Letzter Beitrag vor 14 Jahren 982 Views
Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 14 Jahren
group.Users.Contains(userX) - wie implementieren?

Hallo,

ich habe ein System mit User- und Group-Objekten, wobei es jeweils an User eine Eigenschaft Groups und an Group eine Eigenschaft Users gibt, jeweils vom Typ IList<>.

So weit, so gut. Funktioniert auch alles.

Nun möchte ich wissen, ob eine Gruppe einen bestimmten Benutzer enthält - ist ja prinzipiell nicht schwer:

var isUserInGroup = group.Users.Contains(userX);

Das Blöde ist nun aber, dass ich für userX genau das Objekt reingeben muss, das in der Gruppe gespeichert ist. Was ich aber gerne hätte, wäre, dass die beiden Objekte inhaltlich verglichen werden - im Idealfall nur, ob das Feld namens ID übereinstimmt.

Wie könnte man so etwas lösen, ohne für Groups und Users jetzt jeweils eine Ableitung von List samt Überladung von Contains schreiben zu müssen?

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

328 Beiträge seit 2006
vor 14 Jahren

probiers mal folgendermaßen:

int ID = XX;
bool isUserInGroup = groups.Users.Exists(x => x.ID == ID);

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 14 Jahren

Danke für die Antwort. Das funktioniert so wohl - finde ich aber nicht sonderlich elegant, weil man den Code halt doch mehrfach braucht ...

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

328 Beiträge seit 2006
vor 14 Jahren

btw, so gehts au:

            bool userInGroup = (from user in groups.Users
                                where user.ID == ID
                                select user).Count() > 0;

weil man den Code halt doch mehrfach braucht ...

Du könntest dir eine Funktion in der Klasse Groups schreiben "bool HasUser(int ID)" welche das Gewünschte implementiert

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 14 Jahren

Tja ... das ist halt wieder so .... hach, irgendwie nicht so richtig elegant. Aber es läuft wohl darauf hinaus.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

D
69 Beiträge seit 2008
vor 14 Jahren

bin mir grade nicht sicher ob das funktioniert aber könntest du nicht die GetHashCode und Equals methode von user überschreiben?

Bei Risiken oder Nebenwirkungen fressen sie die Packungsbeilage oder schlagen sie ihren Arzt mit ihrem Apoteker.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 14 Jahren

Hmmmmm, das wäre eine Idee .... müsste ich mal probieren.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Golo Roden,

wenn die Objekte grundsätzlich als gleich zu betrachten sind, wenn die ID gleich ist, wäre ein überschreiben von Equals & Co sogar geboten.

Allerdings finde ich es persönlich wünschenswert, dass es ein Objekt mit einer bestimmten ID immer nur einmal geben kann. Wenn du das bei der Erzeugung der Objekte hinbekommst, könntest du ohne weiteres ganz normal Contains benutzen.

Wobei zu überlegen wäre, ob du statt einer normalen Liste nicht besser HashSet verwendest.

herbivore