Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何内联设置集合?_C#_.net 4.0 - Fatal编程技术网

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)。哦,好吧。