1

我有这样的方法:

public static void Map<TEntityTrack>() 

在哪里TEntityTrack实现:

public abstract class EntityTrack<TEntity> : EntityTrack, IChangeTrackingService<TEntity>

Map方法内部,我怎么知道 TEntityTrack 的 TEntity 类类型?我不想在 Map 中指定TEntity,因为我想映射我的实现,例如:

TrackMap.Map<MyImplOfTrackByEntity>();

是否可以?

4

3 回答 3

5

您应该在Map方法上添加第二个类型参数,以及适当的类型约束

public static void Map<TEntityTrack, TEntity>() 
   where TEntityTrack : EntityTrack<TEntity>
{
    var entityType = typeof(TEntity);
}
于 2013-04-04T12:42:28.977 回答
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.");
于 2013-04-04T12:48:23.597 回答
-1

如果我理解正确,您可以使用以下语句获取泛型参数的类型:

Type param = typeof(TEntity);
于 2013-04-04T12:42:24.140 回答