如何设置内联集合?

时间:2012-01-31 16:52:25

标签: c# .net-4.0

例如:

DataTable table = new DataTable() 
{ 
  Columns = new DataColumnCollection(
     { 
         new DataColumn("col1"), 
         new DataColumn("col2")
     })
});

6 个答案:

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