47 Stimmen

Initialisierung einer Generic.List in C#

In C# kann ich eine Liste mit der folgenden Syntax initialisieren.

List<int> intList= new List<int>() { 1, 2, 3 };

Ich würde gerne wissen, wie das {} Syntax funktioniert, und ob es einen Namen hat. Es gibt einen Konstruktor, der ein IEnumerable könnte man das nennen.

List<int> intList= new List<int>(new int[]{ 1, 2, 3 });

Das scheint eher "Standard" zu sein. Wenn ich den Standardkonstruktor für die Liste dekonstruiere, sehe ich nur

this._items = Array.Empty;

Ich würde dies gerne tun können.

CustomClass abc = new CustomClass() {1, 2, 3};

Und in der Lage sein, die 1, 2, 3 Liste. Wie funktioniert das?

Update

Jon Skeet antwortete

Es ruft die Par Konstruktor und ruft dann Add auf:

List<int> tmp = new List<int>(); tmp.Add(1); tmp.Add(2); tmp.Add(3); List<int> intList = tmp;

Ich verstehe, was es bewirkt. Ich möchte wissen, wie. Woher weiß diese Syntax, dass sie die Methode Add aufrufen soll?

Update

Ich weiß, es ist klischeehaft, eine Antwort von Jon Skeet zu akzeptieren. Aber das Beispiel mit den Strings und Ints ist genial. Auch eine sehr hilfreiche MSDN-Seite ist:

0voto

Soweit es mich betrifft, sucht das Hinzufügen von Elementen über die Objektinitialisierung eine Methode Add. Da List<int> also void Add(int) hat, wird es funktionieren.

Um es in Ihrer Klasse zu verwenden, fügen Sie einfach

class CustomClass { 
   public void Add(int num) {
      // Your code here
   }
}

Ihre Klasse sollte IEnumerable implementieren, wie Hallgrim betont hat.

0voto

Alexander Kahoun Punkte 2434

Es verwendet eigentlich die .Add Methode. Das heißt, sie ruft .Add für jedes Element in den Klammern innerhalb des Konstruktors.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X