C# Probleme beim Verständnis einer Methode

estre

Commander
Registriert
Dez. 2005
Beiträge
3.006
Hey Leute,

Ich habe Probleme mit dem Verständnis einer Methode, die scheinbar eine generische Liste erzeugt, vlt. könnt ihr ja Licht ins Dunkle bringen :)

Und zwar habe ich zunächst folgendes Konstrukt:

Code:
public class UserGroup
{
   public string Name
   {
      get;
      internal set;
   }

   
   public string Description
   {
      get;
      internal set;
   }
}


Danach kommt folgendes:



Code:
public static ReadOnlyCollection<UserGroup> EnumGroups(
   string domainName, string machineName,
   string authenticationUser, string authenticationPassword)
	{
.
.

Tu was…
.
.
.

return new ReadOnlyCollection<UserGroup>(userGoupList);
}

Die Methode soll grundsätzlich Benutzerobjekte aus dem Active Directory auslesen., aber ich verstehe nicht so ganz wie diese Methode "EnumGroups" (so heisst sie doch ?! ^^) aufgebaut ist, vorallem wozu das "UserGroup" in den Klammern (<>) dient.


Danke für Eure Hilfe!

Grüße
 
ReadOnlyCollection implementiert ein Array oder eine Liste. Die Elemente im Array/in der Liste sind vom Typ UserGroup.
Die spitzen Klammern dienen zur Erzeugung von generischen Datentypen. Du kannst jetzt jede x-beliebige Klasse in die ReadOnlyCollection stecken, ohne dass sich was an der internen Struktur von ReadOnlyCollection ändert
 
Zuletzt bearbeitet:
Hey,

danke für Deine Antwort.

ich muss gestehen, das mich das noch mehr verwirrt hat :(


public class UserGroup macht doch nichts anderes als das Setzen und Holen eines Namens/Beschreibung, was hat das mit dem Typ dieser ReadOnlyCollection zu tun ?

Angenommen ich möchte das Ergebnis dieser Liste angezeigt bekommen, wie greife ich denn darauf zu ? Steht diese Liste in einer Klasse, oder muss ich sie in meiner Main-Methode erzeugen ?

Sry ich habe echt keine Ahnung ^^

Danke u Gruß!
 
UserGroup selbst macht garnichts. Du kannst Objekte vom Typ UserGroup erstellen und dann den Eigenschaften des Objekts Werte zuweisen, z.B:
Code:
UserGroup group = new UserGroup();

group.Name = "Administratoren";
group.Description = "abcdefg";

Die Methode EnumGroups macht jetzt folgendes:
Sie holt sich alle Nutzergruppen aus dem ActiveDirectory (enum = enumerate = aufzählen/auflisten), und erzeugt für jede Gruppe ein Objekt vom Typ UserGroup.
All diese Objekte werden dann in einer Liste (bzw. Collection) gespeichert.

In deinem Fall ist das eben eine generische Collection vom Typ ReadOnlyCollection<UserGroup>.
Das UserGroup in spitzen Klammern gibt den Typ der Objekte an, die in der Liste gespeichert sind.

Und es können nur Objekte vom Typ UserGroup (oder eines Typs der von UserGroup erbt) darin gespeichert sein.
Das hat den Vorteil der Typsicherheit, d.h. es können eben nicht irgendwelche Objekte wild durcheinander gewürfelt werden, man kann sich sicher sein, dass jedes Objekt in der Liste vom Typ UserGroup ist und muss auch nicht extra casten.

Ich hoffe das war jetzt einigermaßen verständlich ;)
 
Zuletzt bearbeitet:
okay, so langsam dämmert es, vielen Dank!

D.h. ich habe dann z.B. eine Liste mit 100 Objekten die jeweils vom Typ UserGroup sind und diese beiden Eigenschaften (Name und Description) besitzen ?!



Die Frage ist nun wie ich mir diese Objekte z.B. in einer ComboBox ausgeben lassen kann. Meinem Noobskill nach müsste das so gehen:


Code:
foreach (string object in list)
                {
                    comboBox.Items.Add(group);
                }

die Frage ist nun wie ich list (diese müsste ja nun meine generische Liste mit den Objekten sein ?!) erzeugen kann.

string object an dieser Stelle ist ebenfalls falsch, da jedes Objekt in der Foreach ja auch vom Typ UserGroup ist, oder ?

Grüße
 
Zuletzt bearbeitet:
Genau.
string object ist komplett falsch, du kannst da nicht zwei Typen gleichzeitig hinschreiben.
Die Objekte in der Liste sind alle vom Typ UserGroup.

Auf die Liste kannst du so zugreifen:
Code:
ReadOnlyCollection<UserGroup> list = EnumGroups(...hier parameter übergeben...);

foreach(UserGroup group in list)
{
       comboBox.Items.Add(group.Name)
}
Erzeugt wird die Liste schon von der EnumGroups Methode. Die Methode gibt dir dann die fertige Liste zurück und du kannst damit machen was du willst.


Btw nur zur Info:
Es ist auch möglich eine Liste direkt an die ComboBox zu binden. Schau dir mal das an (aber am besten erst, wenn du deinen eigenen Ansatz zum laufen bekommen hast ;)): klick
 
Zuletzt bearbeitet:
Zurück
Oben