如何动态传递<t> </t>的类型

时间:2012-12-14 23:57:46

标签: c#

  

可能重复:
  Pass Type dynamically to <T>

我如何做以下的事情? historyType 在Adapt中不是可识别的类型。

Type historyType = Type.GetType("Domain.MainBoundedContext.CALMModule.Aggregates.LocationAgg." + modifiedEntry.GetType().Name + "History");

ServiceLocationHistory history = adapter.Adapt<ServiceLocation, historyType>(modifiedEntry as ServiceLocation);
historyRepository.Add(history);

编辑: 我最终这样做了:

ServiceLocationHistory history = adapter.GetType()
                                    .GetMethod("Adapt", new Type[] { typeof(ServiceLocation) })
                                    .MakeGenericMethod(typeof(ServiceLocation), typeof(ServiceLocationHistory))
                                    .Invoke(adapter, new object[] { modifiedEntry as ServiceLocation })
                                     as ServiceLocationHistory;

1 个答案:

答案 0 :(得分:2)

这可能是也可能不是您的选项,但您始终可以使用DynamicMethod并发出创建类型的IL并返回ServiceLocationHistory。我经常这样做,而不是hacky反射技巧,它几乎总是更快。

否则,您可以使用反射:

ServiceLocationHistory history = adapter.GetType()
                                        .GetMethod("Adapt")
                                        .MakeGenericMethod(typeof(ServiceLocation), historyType)
                                        .Invoke(adapter, new [] {modifiedEntry})
                                         as ServiceLocationHistory;