Na przykład:Jak ustawić kolekcję w linii?
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
Na przykład:Jak ustawić kolekcję w linii?
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
mówisz o Collection Initialiser funkcji dodanej w C# 3.Jest to wykonane w następujący sposób:
DataTable table = new DataTable()
{
Columns =
{
new DataColumn("col1"),
new DataColumn("col2")
}
};
Nie wywołuje to konstruktora kolekcji, korzysta z kolekcji, która już istnieje w DataTable.
Jest to skrót od Columns.Add(), więc nie wymaga kolumn do ustawiania.
Byłeś tak blisko kodu w swoim pytaniu!
bea-u-ti-ful! Niezłe. –
Prawdopodobnie trzeba usunąć paretheses wokół tej kolekcji inicjatora dla DataColumnCollection
i usunąć sobie równych, końcowego )
Są to zagadnienia składniowe, choć. Podstawowe problemy polegają na tym, że właściwość Columns
nie ma narzędzia ustawiającego, a DataColumnCollection
nie ma publicznego konstruktora.
Zasadniczo musisz utworzyć instancję, a następnie zadzwonić pod numer .Columns.Add()
.
Jeśli jest to coś trzeba zrobić wiele w kodzie, można utworzyć klasy pomocnika, który nie daje friendlier składnię:
DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2");
Próbowałem to zrobić. Nawet jeśli poprawi błąd składni, dostanie komunikat, że ** Kolumny ** są własnością tylko do odczytu. –
@Jay - fajny pomysł +1 –
Obiekt Columns
nie ma setter więc można jedynie modyfikować to.
Jak o tym:
DataTable table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"), new DataColumn("col2") });
Jeśli chcesz zrobić z jednego rachunku w lambda:
DataTable table = (() => {
var table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"),
new DataColumn("col2") });
return table;})();
Chcę zrobić to wszystko w linii. Myślałem, że jest to możliwe za pomocą() => lub czegoś. –
Nie możesz tego zrobić z powodów, które podałem w mojej odpowiedzi. Jeśli chcesz zachować czystość kodu, możesz utworzyć metodę rozszerzenia, aby utworzyć tabelę i dodać kolumny w jednym kroku, ale w pewnym momencie będą to co najmniej dwie linie kodu. –
Jeśli miałby setera, jak by to zrobić? Czy możesz podać przykład pracy? –
Klasa DataColumnCollection
ma konstruktora, więc nie można ręcznie utworzyć instancję. Komunikat o błędzie kompilatora powinna być dość oczywista, mówiąc coś w rodzaju:
typu „System.Data.DataColumnCollection” nie ma zdefiniowanego konstruktorzy
można dodać kolumny do DataTable.Columns
kolekcja stosując metodę Add()
:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("col1"));
table.Columns.Add(new DataColumn("col2"));
nie można użyć tej składni jako własność Kolumny jest tylko do odczytu. Użyłbym techniki zaproponowanej przez Gabe.
Są 2 powody dlaczego to nie będzie działać:
1) nieruchomość Columns
jest tylko do odczytu 2) klasa DataColumnCollection
nie posiada konstruktora, który akceptuje zbiór kolumn, aby go zainicjować.
Najlepsze co możesz zrobić, to stworzyć tabelę w jednej linii i dodać kolumny w innej:
DataTable table = new DataTable();
table.Columns.AddRange(new []
{
new DataColumn("col1"),
new DataColumn("col2")
});
Aby odpowiedzieć na inne pytanie, IFColumns
miał setter i IFDataColumnCollection
akceptowanych kolumn w jego konstruktora składnia byłoby:
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(new DataColumn[]
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
To bardzo zależy od wersji VS/.Net, z której korzystasz. –
Zaktualizowałem tagi. –