2013-02-26 2 views
1

У меня есть класс структура, как это:Объединить данные из базового класса в производный класс

Spatial -> ServiceRequest -> ServiceRequestSystemX

Я написал метод, возвращающий список ServiceRequestSystemX. Данные хранятся отдельно, где хранится пространственная информация. Поэтому каждый раз, когда я создаю новый объект типа ServiceRequestSystemX, я делаю вызов другого интерфейса, чтобы вернуть объект Spatial для этого запроса службы.

Теперь, потому что ServiceRequestSystemX в конечном счете происходит из Spatial, есть быстрый способ, что я могу объединить мой Spatial объект в мой объект ServiceRequestSystemX без всего того, чтобы сделать:

ServiceRequestSystemX.X_Coordinate = Spatial.X_Coordinate; 

который я нахожу утомительным и ненужным.

ответ

4

Как производный тип, ServiceRequestSystemX уже будет выставлять базовые элементы, открытые классом Spatial.

+0

Я знаю ... что я хочу узнать, если у меня уже есть объект типа ServiceRequestSystemX, и тогда я получаю отдельный объект типа Spatial, могу ли я быстро слить Spatial в ServiceRequestSystemX каким-то образом? – markp3rry

+0

Я не думаю, что есть очень простой способ, потому что вы не можете неявно использовать типы ** вниз ** иерархию наследования. –

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

+0

После того, как вы создали расширение выше, вы можете использовать 'MySpatial.CopyTo (MyServiceRequestSystemX)', но он будет заполнять только те свойства, которые совпадают по обе стороны слияния. –

Смежные вопросы