2012-01-31 20 views

答えて

10

あなたがC#3で追加Collection Initialiser 機能について話しています。これは次のように行われます。

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

これは、コレクションコンストラクターを呼び出すのではなく、DataTableに既に存在するコレクションを使用します。

これはColumns.Add()の短縮形であるため、Columnsにセッターを追加する必要はありません。

あなたの質問にはとても近いコードがありました。

+0

bea-u-ti-ful!良いですね。 –

2

おそらくDataColumnCollectionのためにそのコレクション初期化子の周りparethesesを削除し、比類のないを削除する必要があり、最終的)

者は、しかし、構文的な問題です。根本的な問題は、Columnsプロパティにセッターがなく、DataColumnCollectionにパブリックコンストラクターがないことです。

基本的には、インスタンス化して.Columns.Add()を呼び出す必要があります。

これはあなたのコードで多くのことをしなければならない何かである場合、あなたはあなたに優しい構文を与えるヘルパークラスを作成することができますが:あなただけ変更することができますので、

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

私はこれを行おうとしました。構文エラーを修正しても、彼は** Columns **は読み取り専用のプロパティであるというエラーを表示します。 –

+0

@Jay - いいアイデア+1 –

3

Columnsプロパティはセッターを持っていませんそれ。

これはどう:

DataTable table = new DataTable(); 
table.Columns.AddRange(new[] { new DataColumn("col1"), new DataColumn("col2") }); 

あなたは、ラムダ内の1つの文で実行する場合:手動でインスタンスを作成することはできませんので

DataTable table = (() => { 
    var table = new DataTable(); 
    table.Columns.AddRange(new[] { new DataColumn("col1"), 
            new DataColumn("col2") }); 
    return table;})(); 
+0

私はそれをすべてインラインでやりたい。私はそれが()=>か何かを使って可能であると思った。 –

+0

私は自分の答えで与えた理由でそれをインラインで行うことはできません。コードをきれいにしたい場合は、表を作成して1つのステップで列を追加する拡張メソッドを作成できますが、ある時点で少なくとも2行のコードになります。 –

+0

セッターがあれば、どうしたらいいですか?あなたは実用的な例を提供できますか? –

1

クラスDataColumnCollectionにはコンストラクタがありません。何のコンストラクタは

あなたはDataTable.Columnsに列を追加することができますが定義されていない

型「System.Data.DataColumnCollection」:コンパイラのエラーメッセージは、の線に沿って何かを言って、かなり自己説明する必要がありますコレクションをAdd()メソッドを使用して:

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

Columnsプロパティは読み取り専用では使用できません。私はGabeによって提案されたテクニックを使用します。

2

が、これは動作しません、なぜ2つの理由があります:

1)Columnsプロパティは読み取り専用です 2)DataColumnCollectionクラスは、それを初期化する列のコレクションを受け取るコンストラクタを持っていません。ColumnsはそのコンストラクタでセッターとIFDataColumnCollection受け入れ列を持っていた場合、

DataTable table = new DataTable(); 
table.Columns.AddRange(new [] 
    { 
     new DataColumn("col1"), 
     new DataColumn("col2") 
    }); 

はあなたの他の質問に答えるために:
は、あなたができる最善のは、1行の表を作成し、別の列を追加することです 構文は次のようになります。

DataTable table = new DataTable() 
{ 
    Columns = new DataColumnCollection(new DataColumn[] 
    { 
     new DataColumn("col1"), 
     new DataColumn("col2") 
    }) 
}); 
関連する問題