例如:
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
答案 0 :(得分:11)
你在谈论Collection Initialiser 在C#3中添加了一个功能。它是这样完成的:
DataTable table = new DataTable()
{
Columns =
{
new DataColumn("col1"),
new DataColumn("col2")
}
};
这不会调用集合构造函数,它使用DataTable中已存在的集合。
这是Columns.Add()的简写,所以它不需要Columns有一个setter。
您对问题中的代码非常接近!
答案 1 :(得分:3)
Columns
属性没有setter,因此您只能修改它。
这个怎么样:
DataTable table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"), new DataColumn("col2") });
如果你想在lambda中使用一个语句:
DataTable table = (() => {
var table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"),
new DataColumn("col2") });
return table;})();
答案 2 :(得分:2)
您可能需要移除DataColumnCollection
的该集合初始值设定项周围的paretheses,并删除无法匹配的最终)
但这些都是语法问题。根本问题是Columns
属性没有setter,DataColumnCollection
没有公共构造函数。
基本上,您必须实例化然后调用.Columns.Add()
。
如果您需要在代码中做很多事情,那么您可以创建帮助程序类,以便为您提供更友好的语法:
DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2");
答案 3 :(得分:2)
有两个原因可以解决这个问题:
1)Columns
属性是只读的
2)DataColumnCollection
类没有接受一组列来初始化它的构造函数
您可以做的最好的事情是在一行中创建表并在另一行中添加列:
DataTable table = new DataTable();
table.Columns.AddRange( new []
{
new DataColumn("col1"),
new DataColumn("col2")
});
要回答您的其他问题, IF Columns
在其构造函数中有一个setter和 IF DataColumnCollection
接受的列,语法将是:< / p>
DataTable table = new DataTable()
{
Columns = new DataColumnCollection( new DataColumn[]
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
答案 4 :(得分:1)
类DataColumnCollection
没有构造函数,因此您无法手动创建实例。编译器的错误消息应该是不言自明的,并且说出了以下内容:
类型'System.Data.DataColumnCollection'没有定义构造函数
您可以使用DataTable.Columns
方法向Add()
集合添加列:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("col1"));
table.Columns.Add(new DataColumn("col2"));
答案 5 :(得分:1)
您不能使用该语法,因为Columns属性是只读的。我会使用Gabe建议的技术。