在运行时将属性添加到现有 c# 类

本文关键字:添加 运行时 属性 | 更新日期: 2023-09-27 18:36:37

我有一个像"人"这样的类...

 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 类中获取"城市"和"国家"属性。我的预期结果将是...

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

在运行时。

在运行时将属性添加到现有 c# 类

尝试在运行时添加属性充其量是一种非常糟糕的代码气味(最糟糕的是不可能 - 我不会肯定地说这绝对是不可能的)。

我建议你重新考虑你想要实现的目标。如果您知道它总是会向类中添加CityCountry,为什么不能在编译时添加它们呢?告诉我们更多有关所讨论的问题可以帮助我们提出替代解决方案。

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

  • 发出动态方法和程序集

可以尝试使用ExpandoObject在运行时添加属性。请参阅此文章。

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

现在,expando对象包含一个属性Name值为 Dude 1