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

在运行时向现有c#类添加属性,c#,C#,我有一门课像“人” 我有一门DTO课,像 public class DTOAddress { public string City{ get; set; } public string Country{ get; set; } } 在运行期间,我需要在Person类中获取“City”和“Country”属性。即 我的预期结果将是 public class Person { public string N

我有一门课像“人”

我有一门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; }
        }

在运行时。

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


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


      您可以尝试使用
      ExpandoObject
      在运行时添加属性。看


      现在,
      expando
      对象包含一个值为
      Dude 1
      的属性
      Name
      ,您可以尝试使用
      ExpandoObject
      在运行时添加属性。看


      现在
      expando
      对象包含一个值为
      Dude 1
      的属性
      Name
      ,在运行时尝试添加属性充其量是一种非常糟糕的代码味道(最糟糕的情况下是不可能的-我不能肯定这绝对是不可能的)


      我建议你重新考虑一下你到底想要实现什么。如果您知道它总是将
      City
      Country
      添加到类中,为什么不能在编译时添加它们呢?告诉我们更多有关问题的信息可以帮助我们提出替代解决方案。

      尝试在运行时添加属性充其量是一种非常糟糕的代码味道(最糟糕的情况下是不可能的-我不确定这绝对是不可能的)


      我建议你重新考虑一下你到底想要实现什么。如果您知道它总是将
      City
      Country
      添加到类中,为什么不能在编译时添加它们呢?告诉我们更多有关问题的信息可以帮助我们提出替代解决方案。

      我已经看到了这样的链接。但它不符合我的要求。我不想创建新类型。我想扩展现有的类型。ExpandooObject和TypeBuilder不符合我的要求。正如您所知。这是非常糟糕的编程实践。一个人不一定有
      城市
      ,也不一定有
      国家
      。你想用这个来解决什么要求?这听起来像是一个错误。我见过这样的链接。但它不符合我的要求。我不想创建新类型。我想扩展现有的类型。ExpandooObject和TypeBuilder不符合我的要求。正如您所知。这是非常糟糕的编程实践。一个人不一定有
      城市
      ,也不一定有
      国家
      。你想用这个来解决什么要求?这听起来像是一个问题。请给我一个例子,这更像是一个评论@Shohel抱歉,这是一个错误的链接,请看这里我不想使用类型生成器创建新类型请给我一个示例这更多是一个注释@Shohel很抱歉,这是错误的链接,请看这里,我不想使用类型生成器创建新类型
       public class Person  
              {
                 public string Name { get; set; }
                 public int Id { get; set; }
                 public string City{ get; set; }
                 public string Country{ get; set; }
              }
      
      dynamic expando = new ExpandoObject();
      expando.Name = "Dude 1";