1

私はこのような方法を持っています:

public static void Map<TEntityTrack>() 

TEntityTrack次の実装です。

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

メソッド内Mapで、TEntityTrack の TEntity クラス タイプをどのように知ることができますか? TEntity実装を次のようにマップしたいので、マップで指定したくありません。

TrackMap.Map<MyImplOfTrackByEntity>();

出来ますか?

4

3 に答える 3

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 に答える