如何内联设置集合
本文关键字:集合 设置 何内联 | 更新日期: 2023-09-27 18:21:57
例如:
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
您谈论的是Collection InitializerC#3中添加的功能。它是这样做的:
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
集合初始值设定项周围的排列,并删除不匹配的最终)
不过,这些都是语法问题。潜在的问题是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")
});
为了回答您的另一个问题,IFColumns
有一个setter,IFDataColumnCollection
在其构造函数中接受列,语法为:
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建议的技巧。