如何内联设置集合

本文关键字:集合 设置 何内联 | 更新日期: 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建议的技巧。