0

可能重复:
将类型动态传递给 <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;
4

1 回答 1

2

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

否则,通过反射,您可以执行以下操作:

ServiceLocationHistory history = adapter.GetType()
                                        .GetMethod("Adapt")
                                        .MakeGenericMethod(typeof(ServiceLocation), historyType)
                                        .Invoke(adapter, new [] {modifiedEntry})
                                         as ServiceLocationHistory;
于 2012-12-15T00:00:36.917 回答