例如:如何在線設置集合?
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