私はジェネリック型を持っています:
class DictionaryComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
そして、与えられたディクショナリタイプに対してこのクラスのインスタンスを作成する(すべき)ファクトリメソッド。
private static IEqualityComparer<T> CreateDictionaryComparer<T>()
{
Type def = typeof(DictionaryComparer<,>);
Debug.Assert(typeof(T).IsGenericType);
Debug.Assert(typeof(T).GetGenericArguments().Length == 2);
Type t = def.MakeGenericType(typeof(T).GetGenericArguments());
return (IEqualityComparer<T>)Activator.CreateInstance(t);
}
無関係なものをすべて取り除きます-このコードでさえ同じ例外をスローします。
private static object CreateDictionaryComparer()
{
Type def = typeof(DictionaryComparer<,>);
Type t = def.MakeGenericType(new Type[] { typeof(String), typeof(object) });
return Activator.CreateInstance(t);
}
アサートはパスするので、それT
は一般的であり、2つの一般的な引数があることがわかります。MakeGenericType
ただし、次の行は次の場合を除きます。
提供されるジェネリック引数の数は、ジェネリック型定義のアリティと同じではありません。
パラメータ名:インスタンス化
私は過去にこの種のことをしたことがありますが、この場合、なぜこれが機能しないのか理解できません。(さらに、私はグーグルのアリティにならなければなりませんでした)。