我想知道在C#中是否存在向这样创建的对象添加值的方法:
object myObject = new { a = "First", b = "Second" };
我可以添加一个新字段,例如' c'到myObject(在我的意思是声明行之后)? 我在doc上搜索过,但是我找不到任何可以做到的事情。
所以,我的问题是:
非常感谢你的帮助!
祝你好运, 安德烈
答案 0 :(得分:0)
了解此语法的含义非常重要。首先,new { a = "First", b = "Second" }
使用您指定的特定属性创建匿名类型的实例。这已经回答了你的问题 - 如果一个对象是以这个方式创建的,你不能“扩展”它。此外,对object
的投射也几乎无用,因为您失去了对属性的访问权限(对var
使用object
而不是new { ... }
,这会将类型推断为实际的匿名您创建的类型。)
至于如何使用新属性动态扩展对象的一般问题,答案很简单 - 使用ExpandoObject:
dynamic myObject = new ExpandoObject();
myObject.a = "First";
myObject.b = "Second";
myObject.anything = 42;
//etc.
如果将实例视为dynamic
,则将每个属性set / get视为动态调用,并在运行时完成绑定。 ExpandoObject 允许随时添加任意数量的其他属性。如果要访问所有属性,请将其强制转换为IDictionary<string, object>
。