Tengo un tipo genérico:¿Por qué este código se quejaría acerca de "la ariadidad de la definición de tipo genérico"?
class DictionaryComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
Y un método de fábrica que (debe) crear una instancia de esta clase para un tipo de diccionario dado.
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);
}
Eliminando todas las cosas extrañas - incluso este código arroja la misma excepción.
private static object CreateDictionaryComparer()
{
Type def = typeof(DictionaryComparer<,>);
Type t = def.MakeGenericType(new Type[] { typeof(String), typeof(object) });
return Activator.CreateInstance(t);
}
El paso Afirma así que sé que T
es genérico y tiene dos argumentos genéricos. La línea con MakeGenericType
sin embargo exceptúa con:
La cantidad de argumentos genéricos proporcionados no es igual a la ariadidad de la definición de tipo genérico.
Nombre de parámetro: ejemplificación
he hecho este tipo de cosas en el pasado y por la vida de mí, no puede entender por qué esto no está funcionando en este caso. (Además tuve que Google arity).
¿Qué está pasando como 'T' a' CreateDictionaryComparer'? He intentado pasar 'CreateDictionaryComparer>()' y esto funciona bien para mí (usando el compilador de Mono C# versión 1.9.1.0). –
Tenía DictionaryComparer como una clase interna a una que es en sí misma genérica. Creo que fue manguera las obras. – dkackman
Solo por curiosidad, ¿podría proporcionar la muestra completa (fallida) para poder probarla en mi compilador? –