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