2013-02-26 32 views
1

我有一个类结构是这样的:合并数据到派生

空间 - > ServiceRequest - > ServiceRequestSystemX

我已经写回到ServiceRequestSystemX的列表的方法。数据分开保存到空间信息存储的位置。所以每次我创建一个ServiceRequestSystemX类型的新对象时,我都会调用不同的接口来返回该服务请求的Spatial对象。

现在因为ServiceRequestSystemX最终从空间衍生,是有一个快速的方法,我可以合并我的空间物体进入我ServiceRequestSystemX对象,而只是有做:

ServiceRequestSystemX.X_Coordinate = Spatial.X_Coordinate; 

我觉得这繁琐和不必要的。

回答

4

作为派生类型,ServiceRequestSystemX将已经公开由Spatial类公开的基础成员。

+0

我知道...我想知道的是,如果我已经有一个ServiceRequestSystemX类型的对象,然后我得到一个单独的对象类型空间我可以快速合并Spatial到ServiceRequestSystemX莫名其妙吗? – markp3rry 2013-02-26 11:49:22

+0

我不认为有一种非常简单的方法,因为您不能隐式地将类型**向下继承层次结构。 – 2013-02-26 11:53:49

0

根据我在第一个答案中的意见,你可以可以尝试使用反射来将两个对象合并在一起。但我会称这是一个肮脏的黑客。

public static class ExtensionMethods 
{ 
    public static TEntity CopyTo<TEntity>(this TEntity OriginalEntity, TEntity NewEntity) 
    { 
     PropertyInfo[] oProperties = OriginalEntity.GetType().GetProperties(); 

     foreach (PropertyInfo CurrentProperty in oProperties.Where(p => p.CanWrite)) 
     { 
      if (CurrentProperty.GetValue(NewEntity, null) != null) 
      { 
       CurrentProperty.SetValue(OriginalEntity, CurrentProperty.GetValue(NewEntity, null), null); 
      } 
     } 

     return OriginalEntity; 
    } 
} 

此代码取自另一篇文章发现here

+0

似乎并非如此简单,希望可能有一个快速的方法调用,但唉!感谢您的帮助。 – markp3rry 2013-02-26 14:09:38

+0

一旦你创建了上面的扩展,你可以使用'MySpatial.CopyTo(MyServiceRequestSystemX)' - 但它只会填充合并两边相同的属性。 – 2013-02-26 14:44:16