Sprawdź, czy obiekt implementuje ogólny interfejs dla dowolnego typu ogólnego
Chcę przetestować obiekt, aby zobaczyć, czy implementujeIDictionary<TKey,TValue>
ale nie obchodzi mnie coTKey
iTValue
są
Mogę sprawdzić, czy jest konkretnym przykładem strukturyDictionary<,>
lubię to:
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
ale nie mogę wymyślić sposobu na przetestowanie czegoś, co implementujeIDictionary<,>
. Ta technika nie działa dla interfejsu;IsAssignableFrom
zwraca false, jeśli testuję względem ogólnego typu bazyIDictionary<,>
, co wydaje się dziwne, ponieważ działa dla konkretnego typu.
Normalnie używałbyśis
przetestować, czy coś implementuje interfejs, ale oczywiście działa to tylko wtedy, gdy chcę przetestować konkretny interfejs ogólny. Albo po prostu przetestuję wspólny interfejs przodków, ale w przeciwieństwie do innych ogólnych struktur danych, takich jakIList<>
iICollection<>
, nie ma unikalnego nie-ogólnego interfejsu, z którego ogólnyIDictionary<TKey,TValue>
dziedziczy.