Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
group.Users.Contains(userX) - wie implementieren?
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
TripleX
myCSharp.de - Member

Avatar #avatar-3071.jpg


Dabei seit:
Beiträge: 338
Herkunft: Nürtingen

beantworten | zitieren | melden

probiers mal folgendermaßen:

int ID = XX;
bool isUserInGroup = groups.Users.Exists(x => x.ID == ID);
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von TripleX am .
Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
TripleX
myCSharp.de - Member

Avatar #avatar-3071.jpg


Dabei seit:
Beiträge: 338
Herkunft: Nürtingen

beantworten | zitieren | melden

btw, so gehts au:

            bool userInGroup = (from user in groups.Users
                                where user.ID == ID
                                select user).Count() > 0;
Zitat
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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von TripleX am .
Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
dein.Tod
myCSharp.de - Member



Dabei seit:
Beiträge: 69

beantworten | zitieren | melden

bin mir grade nicht sicher ob das funktioniert aber könntest du nicht die GetHashCode und Equals methode von user überschreiben?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dein.Tod am .
Bei Risiken oder Nebenwirkungen fressen sie die Packungsbeilage oder schlagen sie ihren Arzt mit ihrem Apoteker.
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers