例如:如何在线设置集合?
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
例如:如何在线设置集合?
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
你都在谈论C#3中添加的Collection Initialiser 功能。它是这样完成的:
DataTable table = new DataTable()
{
Columns =
{
new DataColumn("col1"),
new DataColumn("col2")
}
};
这不调用集合构造函数,它使用DataTable中已存在的集合。
这是Columns.Add()的缩写,因此它不需要列有setter。
你与你的问题中的代码如此接近!
bea-u-ti-ful!好一个。 – 2012-01-31 17:27:45
你可能需要删除周围的集合初始的paretheses为DataColumnCollection
,并删除无法比拟的,最终)
这些都是语法问题,但。根本问题是Columns
属性没有setter,并且DataColumnCollection
没有公共构造函数。
基本上,你必须实例化,然后调用.Columns.Add()
。
如果这是你必须做很多的代码,您可以创建辅助类,会给你更友好语法的东西:
DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2");
我试图做到这一点。即使他纠正了语法错误,他也会得到一个错误,指出** Columns **是一个只读属性。 – 2012-01-31 17:01:18
@Jay - 不错的想法+1 – 2012-01-31 17:09:46
的Columns
属性没有一个二传手,所以你只能修改它。
如何:
DataTable table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"), new DataColumn("col2") });
如果你想要做的拉姆达一个声明:
DataTable table = (() => {
var table = new DataTable();
table.Columns.AddRange(new[] { new DataColumn("col1"),
new DataColumn("col2") });
return table;})();
我想要全部内联。我认为有可能使用()=>或其他。 – 2012-01-31 17:02:46
由于我在答案中给出的原因,您无法进行内联。如果你想保持代码清洁,你可以创建一个扩展方法来创建一个表,并在一个步骤中添加列,但在某一点上,它至少会有两行代码。 – 2012-01-31 17:05:47
如果它有一个setter,它会怎么做?你能提供一个实例吗? – 2012-01-31 17:06:38
类DataColumnCollection
没有构造函数,所以你不能手动创建一个实例。编译器的错误信息应该是不言自明的,他说沿着线的东西:
类型“System.Data.DataColumnCollection”已经没有构造函数定义
您可以添加列DataTable.Columns
收集使用Add()
方法:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("col1"));
table.Columns.Add(new DataColumn("col2"));
为列属性为只读,您不能使用这种语法。我会使用Gabe建议的技术。
有2个原因,这是行不通的:
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")
})
});
这非常依赖于您使用的VS/.Net版本。 – 2012-01-31 16:54:57
我更新了标签。 – 2012-01-31 16:56:08