4

次で初期化されたオブジェクトにアイテムを追加する方法:

object obj = new { blah = "asdf" };

別のキーと値のペアを追加したい場合、どうすればよいですか?

4

3 に答える 3

10

その初期化構文を使用してオブジェクトを作成すると、オブジェクトの匿名型定義を変更することはできません。つまり、で初期化すると{ blah = "asdf" }、そのblahプロパティのみが含まれます。別のものを追加することはできません。これは、匿名型が静的型であるためです。

ExpandoObjectただし、dynamicオブジェクトの場合、答えは機能します。それについては他の答えを参照してください。

キーと値のペアのコレクションを管理しようとしているだけの場合は(質問の言い回しに基づいて、ちょっと並べ替えてください)、辞書を使用してください。

var kvp = new Dictionary<string, string>
{
    { "blah", "asdf" }
};

kvp.Add("womp", "zxcv");
于 2011-04-21T18:52:11.213 に答える
7

@BoltClockはオンです。もう1つの方法は、インテリセンスを失ってExpandoObjectを使用することです。

dynamic obj = new ExpandoObject();
obj.blah = "asdf";

// sometime later

obj.somethingelse = "dfgh";

// obj now has 'blah' and 'somethingelse' 'properties'
于 2011-04-21T18:56:16.733 に答える
6

そのようなオブジェクトを定義すると、完了です。何も追加できません。

ただし、C#4.0を使用している場合は、常に動的タイプを使用できます。

dynamic obj = new ExpandoObject();

obj.blah = "asdf";
obj.blahBlah = "jkl;";
于 2011-04-21T18:56:35.010 に答える