Mam typu rodzajowego:Dlaczego ten kod narzekałby na "ogólną definicję typu"?
class DictionaryComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
oraz metody fabryki, które będą (powinny) utworzyć instancję tej klasy dla danego rodzaju słownika.
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);
}
Pozbycie się wszystkich obcych rzeczy - nawet ten kod generuje ten sam wyjątek.
private static object CreateDictionaryComparer()
{
Type def = typeof(DictionaryComparer<,>);
Type t = def.MakeGenericType(new Type[] { typeof(String), typeof(object) });
return Activator.CreateInstance(t);
}
The twierdzi przechodzą więc wiem, że T
ma charakter ogólny i ma dwa argumenty rodzajowe. Linia z numerem MakeGenericType
, ale z wyjątkiem:
Liczba podanych ogólnych argumentów nie jest równa ogólnej definicji typu.
Nazwa parametru: instancji
robiłem takie rzeczy w przeszłości i dla życia mnie nie mogę zrozumieć, dlaczego to nie działa w tym przypadku. (plus miałem do Google arity).
Co przechodzisz jako 'T' do' CreateDictionaryComparer'? Próbowałem przekazanie 'CreateDictionaryComparer>()' i to działa dobrze dla mnie (przy użyciu kompilatora Mono C# w wersji 1.9.1.0). –
Miałem DictionaryComparer jako klasę wewnętrzną do tej, która sama jest generyczna. Pomyśl, że to robota. – dkackman
Po prostu z ciekawości, czy mógłbyś podać pełną (uszkodzoną) próbkę, aby móc ją wypróbować na moim kompilatorze? –