【问题标题】:Can I dynamically create a property type and property name for an object?我可以为对象动态创建属性类型和属性名称吗?
【发布时间】:2011-06-07 03:15:08
【问题描述】:

如果我从字符串变量中获得名称和类型,我能否为(匿名)对象动态创建属性类型属性名称

【问题讨论】:

  • 您是在问是否可以在运行时向匿名对象添加新属性,或者是否可以从字符串变量访问匿名类型的属性?

标签: c# .net


【解决方案1】:

如果您在谈论匿名类型(例如var x = new { Property1 = data1, ...}),那么我认为您不能。

您可以做的是从您已有的匿名类型中创建另一种新的匿名类型。如果您想从X 创建Y,您可以通过var Y = new { YProp1 = X.Prop1, YProp2 = X.Prop2, etc} 创建Y

【讨论】:

    【解决方案2】:

    从 c# 4.0 开始,您可以使用 dynamic 关键字和基于字典的 DynamicObject 对象在运行时创建/扩展属性,这与 JavaScript 非常相似。

    【讨论】:

      【解决方案3】:

      对于匿名类,没有。这些是由编译器在编译时定义的。

      【讨论】:

        【解决方案4】:

        C# .NET 是一种静态类型语言,这意味着所有类都必须在编译时定义。因此,您的问题的下意识回答是

        但是,与大多数语言一样,您可以使用一些变通方法。例如,您可以创建一个具有 Dictionary<string,object> 类型属性的类,该属性将您的属性名称作为键,将您的属性值作为值。

        当然,这样做的缺点是您需要编写额外的代码来验证字典中的数据是否有效......所以它可能不值得。

        【讨论】: