Sie sprechen über den Sammelinitialisierer Feature in C # 3 hinzugefügt. Es ist so gemacht:
%Vor%Dies ruft keinen Auflistungskonstruktor auf, es verwendet die Auflistung, die bereits in der DataTable vorhanden ist.
Dies ist eine Abkürzung für Columns.Add (), so dass Spalten keinen Setter haben müssen.
Sie waren so nah mit dem Code in Ihrer Frage!
Wahrscheinlich müssen Sie die Klammern um den Auflistungsinitialisierer für DataColumnCollection
entfernen und die nicht übereinstimmenden, endgültigen )
Das sind jedoch syntaktische Probleme. Die zugrunde liegenden Probleme bestehen darin, dass die Columns
-Eigenschaft keinen Setter hat und die DataColumnCollection
keinen öffentlichen Konstruktor hat.
Grundsätzlich müssen Sie .Columns.Add()
instanziieren und dann aufrufen.
Wenn dies etwas ist, was Sie in Ihrem Code tun müssen, könnten Sie Hilfsklassen erstellen, die Ihnen eine freundlichere Syntax geben würden:
%Vor%Es gibt zwei Gründe, warum das nicht funktioniert:
1) Die Eigenschaft Columns
ist schreibgeschützt
2) Die Klasse DataColumnCollection
hat keinen Konstruktor, der eine Sammlung von Spalten akzeptiert, um sie zu initialisieren.
Am besten können Sie die Tabelle in einer Zeile erstellen und die Spalten in einer anderen Zeile hinzufügen:
Um Ihre andere Frage zu beantworten, IF Columns
hatte einen Setter und IF DataColumnCollection
akzeptierte Spalten in seinem Konstruktor würde die Syntax lauten:
Die Klasse DataColumnCollection
hat keinen Konstruktor, so dass Sie keine Instanz manuell erstellen können. Die Fehlermeldung des Compilers sollte ziemlich selbsterklärend sein und etwas wie folgt aussagen:
Der Typ 'System.Data.DataColumnCollection' hat keine Konstruktoren definiert
Sie können Spalten zur Sammlung DataTable.Columns
hinzufügen, indem Sie die Methode Add()
verwenden: