Initialisierung einer Liste mit Arrays

8

Ich möchte eine Liste von String-Arrays zur Kompilierzeit auffüllen

etwas wie das:

%Vor%

aber ich bekomme einen Kompilierfehler: No overloaded method 'Add' takes 2 arguments

Warum ist das? Es funktioniert, wenn sie keine String-Arrays mit List<string>

sind     
dukevin 03.12.2015, 22:39
quelle

6 Antworten

6

Der Grund, warum Ihr Code nicht funktioniert ist in How to : Initialisieren Sie ein Dictionary mit einem Auflistungsinitialisierer (C # -Programmierhandbuch) :

  

Ein Dictionary enthält eine Sammlung von Schlüssel / Wert-Paaren. Die Add-Methode benötigt zwei Parameter, einen für den Schlüssel und einen für den Wert. Um ein Dictionary zu initialisieren, oder eine Auflistung, deren Add-Methode mehrere Parameter verwendet , schließen Sie jeden Parametersatz in geschweifte Klammern ein ...

Also in der Syntax

%Vor%

Der Compiler erwartet von Ihrer Sammlung eine Add(string, string, string) -Methode. Da es für List<string []> keine solche Methode gibt, schlägt die Kompilierung fehl.

Tatsächlich ist es möglich, eine solche Sammlung zu erstellen und mit dieser Syntax zu initialisieren. Wenn Sie die folgende Sammlung erstellen:

%Vor%

Folgendes wird erfolgreich kompiliert und eine Sammlung mit einem 3-Tupel erstellt:

%Vor%

Sie können auch die folgende List -Unterklasse erstellen:

%Vor%

Und initialisiere es mit der gewünschten Syntax:

%Vor%

Aber für List<string []> müssen Sie, wie von anderen bemerkt wurde, Ihre Synonymliste initialisieren, indem Sie explizit jeden string [] -Eintrag zuweisen, anstatt einen impliziten Sammlungsinitialisierer für jeden Eintrag zu verwenden:

%Vor%     
dbc 03.12.2015, 23:03
quelle
8

Sie erstellen in Ihrem Beispiel keine Arrays, versuchen Sie Folgendes:

%Vor%     
axlj 03.12.2015 22:46
quelle
6

Sie müssen ein Zeichenfolgenarray hinzufügen

%Vor%     
keyboardP 03.12.2015 22:44
quelle
6

Erstellen Sie implizit typisierte Arrays für Ihren List Initialisierer:

%Vor%

new [] { ... } entspricht der Ausführung von new string[] { ... } , wenn die Typen der Objekte im Array alle string sind. Sie erhalten einen Fehler mit der impliziten Syntax, wenn die Typen der Objekte im Array unterschiedlich sind.

    
E. Moffat 03.12.2015 22:45
quelle
5

Sie müssen angeben, dass die inneren Objekte Arrays sind, damit sie nicht nach Add-Methoden mit mehreren Parametern sucht.

%Vor%     
chilltemp 03.12.2015 22:47
quelle
1

Ich denke, es könnte sein, dass Sie keine Instanzen der Arrays erstellen.

%Vor%     
agovan 03.12.2015 22:53
quelle

Tags und Links