将属性添加到动态对象.NET

Ale*_*sky 16 .net c# dynamic

我可能想要太多,但我的情景是

public dynamic CreateConfigObject(JobConfigurationModel config) {
    dynamic configObject = new { };

    configObject.Git = new GitCheckout {
        Repository = config.Github.Url
    };

    return configObject;
}
Run Code Online (Sandbox Code Playgroud)

当然,它失败了,configObject.Git因为这个属性不存在.我希望能够在运行时添加任意数量的属性,而不需要预先知道属性的数量和名称;

这种情况在C#中是否可能,或者我的JavaScript想象力开始伤害我?:)

SLa*_*aks 35

dynamic 允许对强类型对象进行松散类型的访问.

您应该使用ExpandoObject该类,它允许对内部字典进行松散类型的访问:

dynamic configObject = new ExpandoObject();

configObject.Git = new GitCheckout {
    Repository = config.Github.Url
};
Run Code Online (Sandbox Code Playgroud)

  • 不要过度使用`ExpandoObject`.除非你真的需要,否则不要放弃编译时类型安全. (12认同)
  • ExpandoObject,现在是我最喜欢的.NET对象:) (2认同)
  • 实际上找到了一个关于这个主题的Skeet-Link:http://stackoverflow.com/questions/1394117/attaching-properties-and-methods-at-runtime-in-c-4-0/1394134#1394134 (2认同)