在运行时期间添加属性现有的c#类

时间:2015-01-07 10:06:09

标签: c#

我有一个像“人”这样的课......

 public class Person  
    {
       public string Name { get; set; }
       public int Id { get; set; }

    }

我有像

这样的DTO课程
 public class DTOAddress
    {
       public string City{ get; set; }
       public string Country{ get; set; }

    }

在运行时我需要在Person类中获得'City'和'Country'属性。即 我的预期结果将是......

 public class Person  
        {
           public string Name { get; set; }
           public int Id { get; set; }
           public string City{ get; set; }
           public string Country{ get; set; }
        }

在运行时。

3 个答案:

答案 0 :(得分:3)

尝试在运行时添加属性是一个非常糟糕的代码味道(并且最糟糕的情况是不可能的 - 我肯定不会说它绝对是完全不可能的)。

我建议您重新考虑您正在尝试实现的目标。如果您知道它会始终将CityCountry添加到课程中,为什么您不能在编译时添加它们?告诉我们有关问题的更多信息可以帮助我们提出替代解决方案。

答案 1 :(得分:2)

据我所知,这是不可能的。编译class后,您无法更改它,已完成。但是您可以在运行时创建具有新属性的新类。在MSDN中有一个很好的信息:

答案 2 :(得分:2)

您可以尝试使用ExpandoObject在运行时添加属性。请参阅this article

dynamic expando = new ExpandoObject();
expando.Name = "Dude 1";

现在expando对象包含值为Name的属性Dude 1