【发布时间】:2018-02-19 10:18:22
【问题描述】:
我有一个通用方法
public async Task Save<T>(T aggregate) where T : AggregateRoot
从这个方法我调用另一个泛型方法
var indexRegistrations = IndexRegistrar.GetAll<T>();
现在在第二个泛型方法中,我想获取T 的真实类型,它是AggregateRoot 的子类型:
public static List<IndexRegistration> GetAll<T>() where T : AggregateRoot
{
return _register.FindAll(r => r.aggregateType == typeof(T));
}
但是,typeof(T) 总是返回 AggregateRoot。
如何获得T 的真实类型(=AggregateRoot 的子类型)?
【问题讨论】:
-
GetType 应该这样做
-
问题是您应该将该类型的对象传递给方法本身,以便您可以在其上调用
GetType。任何其他电话,例如。typeof(T)将返回与您的情况无关的编译时间类型。 -
@YairHalberstadt GetType 会如何“做”?
-
在这里试过,它如果我发送子类型,它总是使用子类型。您是否在将对象传递给您的
Save()方法之前将其转换为AggregateRoot?因为那时 T == AggregateRoot. -
@CptSlow 是否可以将 GetAll 更改为
GetAll( Type searchType )?然后你可以传递运行时类型...