2

リフレクションを通して、これを達成する方法はありますか? インスタンスごとにから
取得しますか?IDictionary<,>IDictionary<int,int>

私の意図は:

 typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType())

一方、 ' query ' はタイプUniqueKeyQuery<Sometype,int>です。
UniqueKeyQuery を拡張可能にしたいので、名前を比較したくありません。

4

2 に答える 2

2

「オープンな」ジェネリック型 (例: query)が必要な場合は、 GetGenericTypeDefinitionが機能します。

 typeof(UniqueKeyQuery<,>).IsAssignableFrom(
     query.GetType().GetGenericTypeDefinition()
 )
于 2013-06-20T16:09:08.280 に答える
1

あなたが試すことができます

typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType().GetGenericDefitition())

うまくいかない場合は、これを使用できます(静的クラスにある必要がある静的拡張メソッド)

public static bool IsOrInheritsGenericDefinition(this Type ThisType, Type GenericDefinition, out Type DefinitionWithTypedParameters)
    {
        DefinitionWithTypedParameters = ThisType;

        while (DefinitionWithTypedParameters != null)
        {
            if (DefinitionWithTypedParameters.IsGenericType)
            {
                if (DefinitionWithTypedParameters.GetGenericTypeDefinition() == GenericDefinition)
                    return true;
            }

            DefinitionWithTypedParameters = DefinitionWithTypedParameters.BaseType;
        }

        return false;
    }

それを次のように呼び出します。

Type QueryType;
query.GetType().IsOrInheritsGenericDefinition(typeof(UniqueKeyQuery<,>), out QueryType);
于 2013-06-20T16:09:46.680 に答える