C# 如何内联设置集合?
例如:C# 如何内联设置集合?,c#,.net-4.0,C#,.net 4.0,例如: DataTable table = new DataTable() { Columns = new DataColumnCollection( { new DataColumn("col1"), new DataColumn("col2") }) }); 您可能需要删除DataColumnCollection集合初始值设定项周围的parethes,并删除不匹配的final) 不过,这些都是句法问题。潜在的问题是Colu
DataTable table = new DataTable()
{
Columns = new DataColumnCollection(
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
您可能需要删除
DataColumnCollection
集合初始值设定项周围的parethes,并删除不匹配的final)
不过,这些都是句法问题。潜在的问题是Columns
属性没有setter,而DataColumnCollection
没有公共构造函数
基本上,您必须实例化并调用.Columns.Add()
如果这是您在代码中必须经常做的事情,您可以创建帮助器类,以提供更友好的语法:
DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2");
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
没有构造函数,因此无法手动创建实例。编译器的错误消息应该是不言自明的,大致如下:
类型“System.Data.DataColumnCollection”未定义构造函数
您可以使用add()
方法将列添加到DataTable中。columns
集合:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("col1"));
table.Columns.Add(new DataColumn("col2"));
不能使用该语法,因为Columns属性是只读的。我会使用Gabe建议的技术。这不起作用的原因有两个: 1)
列
属性是只读的
2) DataColumnCollection
类没有接受列集合以对其进行初始化的构造函数。最好在一行中创建表,在另一行中添加列:
DataTable table = new DataTable();
table.Columns.AddRange( new []
{
new DataColumn("col1"),
new DataColumn("col2")
});
为了回答您的另一个问题,如果Columns
有一个setter,并且DataColumnCollection
在其构造函数中接受了列,则语法为:
DataTable table = new DataTable()
{
Columns = new DataColumnCollection( new DataColumn[]
{
new DataColumn("col1"),
new DataColumn("col2")
})
});
你说的是
在C#3中添加的功能。是这样做的:
DataTable table = new DataTable()
{
Columns =
{
new DataColumn("col1"),
new DataColumn("col2")
}
};
这不会调用集合构造函数,而是使用DataTable中已经存在的集合
这是Columns.Add()的缩写,因此它不要求列具有setter
你的问题中的代码太接近了 这在很大程度上取决于您使用的VS/.Net版本。我尝试过这样做。即使他纠正了语法错误,他也会得到一个错误,说列是只读属性。我想以内联方式完成所有操作。我认为可以使用()=>或其他方法。由于我在回答中给出的原因,您不能在线执行。如果你想保持代码干净,你可以创建一个扩展方法来创建一个表并在一个步骤中添加列,但在某个时候至少需要两行代码。如果它有一个setter,怎么做?您能提供一个工作示例吗?即使
Columns
有一个setter,您也不能这样做,因为DataColumnCollection
没有接受列数组的构造函数。@DStanley-好的。我想我可能不会经常碰到那些东西。我希望看到一个具有公共构造函数和公共setter的示例(不是datatables)。哦,好吧。