我有这样的方法:
public static void Map<TEntityTrack>()
其中TEntityTrack
是以下的实现:
public abstract class EntityTrack<TEntity> : EntityTrack, IChangeTrackingService<TEntity>
在Map
方法中,我怎么知道TEntityTrack的TEntity类类型?
我不想在Map中指定TEntity
,因为我想映射我的实现,如:
TrackMap.Map<MyImplOfTrackByEntity>();
有可能吗?
答案 0 :(得分:5)
您应该在Map
方法上添加第二个类型参数以及相应的type constraint:
public static void Map<TEntityTrack, TEntity>()
where TEntityTrack : EntityTrack<TEntity>
{
var entityType = typeof(TEntity);
}
答案 1 :(得分:0)
如果要在运行时获取类型,可以执行以下操作:
Type[] genericTypes = typeof(TEntityTrack).GetGenericArguments();
Type entityType = genericTypes[0];
当然,添加所有正确的边界检查等。
编辑:为了找到基类型的通用参数。
Type type = typeof(TEntityTrack);
while (type != typeof(object))
{
Type[] genericTypes = type.GetGenericArguments();
if (genericTypes.Length == 0)
{
type = type.BaseType;
}
else
{
Type entityType = genericTypes[0];
return entityType;
}
}
// Throw an exception or other appropriate action
throw Exception("Does not have generic argument.");
答案 2 :(得分:-1)
如果我理解正确,您可以使用以下语句获取泛型参数的类型:
Type param = typeof(TEntity);