2012-01-31 19 views
8

例如:如何在線設置集合?

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

這非常依賴於您使用的VS/.Net版本。 – 2012-01-31 16:54:57

+1

我更新了標籤。 – 2012-01-31 16:56:08

回答

10

你都在談論C#3中添加的Collection Initialiser 功能。它是這樣完成的:

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

這不調用集合構造函數,它使用DataTable中已存在的集合。

這是Columns.Add()的縮寫,因此它不需要列有setter。

你與你的問題中的代碼如此接近!

+0

bea-u-ti-ful!好一個。 – 2012-01-31 17:27:45

2

你可能需要刪除周圍的集合初始的paretheses爲DataColumnCollection,並刪除無法比擬的,最終)

這些都是語法問題,但。根本問題是Columns屬性沒有setter,並且DataColumnCollection沒有公共構造函數。

基本上,你必須實例化,然後調用.Columns.Add()

如果這是你必須做很多的代碼,您可以創建輔助類,會給你更友好語法的東西:

DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2"); 
+0

我試圖做到這一點。即使他糾正了語法錯誤,他也會得到一個錯誤,指出** Columns **是一個只讀屬性。 – 2012-01-31 17:01:18

+0

@Jay - 不錯的想法+1 – 2012-01-31 17:09:46

3

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;})(); 
+0

我想要全部內聯。我認爲有可能使用()=>或其他。 – 2012-01-31 17:02:46

+0

由於我在答案中給出的原因,您無法進行內聯。如果你想保持代碼清潔,你可以創建一個擴展方法來創建一個表,並在一個步驟中添加列,但在某一點上,它至少會有兩行代碼。 – 2012-01-31 17:05:47

+0

如果它有一個setter,它會怎麼做?你能提供一個實例嗎? – 2012-01-31 17:06:38

1

DataColumnCollection沒有構造函數,所以你不能手動創建一個實例。編譯器的錯誤信息應該是不言自明的,他說沿着線的東西:

類型「System.Data.DataColumnCollection」已經沒有構造函數定義

您可以添加列DataTable.Columns收集使用Add()方法:

DataTable table = new DataTable(); 
table.Columns.Add(new DataColumn("col1")); 
table.Columns.Add(new DataColumn("col2")); 
1

爲列屬性爲只讀,您不能使用這種語法。我會使用Gabe建議的技術。

2

有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") 
    }) 
}); 
相關問題