Ich habe einen generischen Typen bekommt:Warum würde sich dieser Code über die "Arity der generischen Typdefinition" beschweren?
class DictionaryComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
Und eine Factory-Methode, die eine Instanz dieser Klasse für einen bestimmten Wörterbuchtyp wird (soll) erstellen.
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);
}
Entfernen Sie alle überflüssigen Sachen - auch dieser Code löst die gleiche Ausnahme aus. Behauptet
private static object CreateDictionaryComparer()
{
Type def = typeof(DictionaryComparer<,>);
Type t = def.MakeGenericType(new Type[] { typeof(String), typeof(object) });
return Activator.CreateInstance(t);
}
Der passieren, damit ich weiß, dass T
generisch ist und hat zwei generische Argumente. Die Linie mit MakeGenericType
excepts jedoch mit:
Die Anzahl der generischen Argumente zur Verfügung gestellt nicht die arity der generischen Typdefinition entsprechen.
Parametername: Instanziierung
Ich habe diese Art der Sache in der Vergangenheit getan und für das Leben von mir kann nicht herausfinden, warum dies nicht in diesem Fall arbeiten. (plus ich musste Google arity).
Was sind vorbei Sie als 'T' zu' CreateDictionaryComparer'? Ich habe versucht, 'CreateDictionaryComparer>()' zu übergeben und das funktioniert gut für mich (mit Mono C# -Compiler Version 1.9.1.0). –
Ich hatte DictionaryComparer als eine innere Klasse zu einer, die selbst generisch ist. Denken Sie, dass das die Arbeiten verschloss. – dkackman
Nur aus Neugier, könnten Sie das vollständige (fehlgeschlagene) Beispiel bereitstellen, damit ich es auf meinem Compiler ausprobieren kann? –