在C#中将对象复制到"this"对象

the*_*row 3 .net c# shallow-copy

我有一些类需要可靠性来将所有公共属性从一个对象复制到另一个对象.
每个类都有一组可能与其他类不同的公共属性.

例:

class Base
{
  // Common properties/methods...
  public void Copy<T>(T data) where T : Base
  {
     // ...
  }
}

class D1 : Base
{
  public int ID
  {
    get;
    set;
  }
}

class D2 : Base
{
  public string Name
  {
    get;
    set;
  }
}
Run Code Online (Sandbox Code Playgroud)

通过谷歌搜索我已经阅读了这些方法:

  • 用反射
  • 生成IL代码
  • 序列化

所有这些都非常复杂或非常慢或有时两者兼而有之.
我错过了什么吗?有没有其他方法来访问原始this指针?

编辑:
我会clerify.
T是调用类的类型.例如,如果它被D1调用,则T将始终为D1.
通用的原因是我不知道T是什么.
我错过了什么吗?
我应该Base data用作参数吗?

Mat*_*ell 6

你所缺少的是你要求编译器知道当你所说的T是一个Base时,T可能是D1和D2类型之一.如何才能知道您的对象是什么属性甚至类型,因为该信息仅在运行时已知.即使你可以foreach (PropertyInfo in this.Properties)它会找出在运行这些属性的名称,因此是一样思考慢,因为是怎么回事了?(这反思,只是更漂亮的语法).它知道什么属性是常见的,直到它知道它正在处理什么类型,你说"我不会告诉你直到运行时"所以答案是"我必须看看运行时"即反射.

其次,仅仅因为D1和D2都可能都具有名为Size的属性并不意味着它们是相同的属性(除非该属性存在于共同的祖先中).

例如,

  • ArtilleryAmmo.Shell和PecanNut.Shell.
  • AcmeCorp.Staff和GandolfTheWizard.Staff
  • California.State和MyBrokenEngine.State
  • LoudSpeaker.Volume和MassiveCrater.Volume
  • Cave.Bats和BasketballGame.Bats

等等