如何设置内联集合?

例如:

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建议的技术。