Как настроить коллекцию inline?
Например:
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
6 ответов
Вы говорите о функции Collection Initializer, добавленной в C# 3. Это делается так:
DataTable table = new DataTable()
{
Columns =
{
new DataColumn("col1"),
new DataColumn("col2")
}
};
Это не вызывает конструктор коллекции, он использует коллекцию, которая уже существует в DataTable.
Это сокращение от Columns.Add(), поэтому для него не требуется, чтобы в столбцах был установщик.
Вы были так близки с кодом в вашем вопросе!
Columns
Свойство не имеет установщика, поэтому вы можете только изменить его.
Как насчет этого:
DataTable table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"), new DataColumn("col2") });
Если вы хотите сделать с одним утверждением в лямбду:
DataTable table = (() => {
var table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"),
new DataColumn("col2") });
return table;})();
Есть две причины, почему это не сработает:
1) Columns
свойство доступно только для чтения 2) DataColumnCollection
Класс не имеет конструктора, который принимает коллекцию столбцов для его инициализации.
Лучшее, что вы можете сделать, это создать таблицу в одну строку и добавить столбцы в другую:
DataTable table = new DataTable();
table.Columns.AddRange( new []
{
new DataColumn("col1"),
new DataColumn("col2")
});
Чтобы ответить на ваш другой вопрос, ЕСЛИ Columns
был сеттер и ЕСЛИ DataColumnCollection
принимает столбцы в своем конструкторе, синтаксис будет:
DataTable table = new DataTable()
{
Columns = new DataColumnCollection( new DataColumn[]
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
Вам, вероятно, нужно удалить паретезы вокруг инициализатора коллекции для DataColumnCollection
и удалите непревзойденный, последний )
Это синтаксические проблемы. Основные проблемы заключаются в том, что Columns
свойство не имеет установщика, а DataColumnCollection
не имеет публичного конструктора
По сути, вы должны создать экземпляр, а затем вызвать .Columns.Add()
,
Если это то, что вам нужно сделать в вашем коде, вы можете создать вспомогательные классы, которые обеспечат вам более дружественный синтаксис:
DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2");
Вы не можете использовать этот синтаксис, так как свойство Columns доступно только для чтения. Я бы использовал технику, предложенную Гейбом.
Класс DataColumnCollection
не имеет конструктора, поэтому вы не можете создать экземпляр вручную. Сообщение об ошибке компилятора должно быть самоочевидным, говоря что-то вроде:
Тип 'System.Data.DataColumnCollection' не имеет определенных конструкторов
Вы можете добавить столбцы к DataTable.Columns
Сбор с помощью Add()
метод:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("col1"));
table.Columns.Add(new DataColumn("col2"));