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 是正确的。另一种选择是使用 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 回答