次で初期化されたオブジェクトにアイテムを追加する方法:
object obj = new { blah = "asdf" };
別のキーと値のペアを追加したい場合、どうすればよいですか?
次で初期化されたオブジェクトにアイテムを追加する方法:
object obj = new { blah = "asdf" };
別のキーと値のペアを追加したい場合、どうすればよいですか?
その初期化構文を使用してオブジェクトを作成すると、オブジェクトの匿名型定義を変更することはできません。つまり、で初期化すると{ blah = "asdf" }
、そのblah
プロパティのみが含まれます。別のものを追加することはできません。これは、匿名型が静的型であるためです。
ExpandoObject
ただし、dynamic
オブジェクトの場合、答えは機能します。それについては他の答えを参照してください。
キーと値のペアのコレクションを管理しようとしているだけの場合は(質問の言い回しに基づいて、ちょっと並べ替えてください)、辞書を使用してください。
var kvp = new Dictionary<string, string>
{
{ "blah", "asdf" }
};
kvp.Add("womp", "zxcv");
@BoltClockはオンです。もう1つの方法は、インテリセンスを失ってExpandoObjectを使用することです。
dynamic obj = new ExpandoObject();
obj.blah = "asdf";
// sometime later
obj.somethingelse = "dfgh";
// obj now has 'blah' and 'somethingelse' 'properties'
そのようなオブジェクトを定義すると、完了です。何も追加できません。
ただし、C#4.0を使用している場合は、常に動的タイプを使用できます。
dynamic obj = new ExpandoObject();
obj.blah = "asdf";
obj.blahBlah = "jkl;";