Teste se um objeto implementa uma interface genérica para qualquer tipo genérico
Eu quero testar um objeto para ver se ele implementaIDictionary<TKey,TValue>
mas eu não me importo com o queTKey
eTValue
está.
Posso testar se é uma instância concreta do frameworkDictionary<,>
como isso:
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
mas não consigo pensar em uma maneira de testar algo que implementaIDictionary<,>
. Essa técnica não funciona para a interface;IsAssignableFrom
return false se eu testar contra o tipo base genéricoIDictionary<,>
, o que parece estranho, já que funciona para o tipo concreto.
Normalmente você usariais
para testar se algo implementa uma interface, mas é claro que isso só funciona se eu quiser testar uma interface genérica específica. Ou gostaria apenas de testar uma interface ancestral comum, mas, ao contrário de outras estruturas de dados genéricas, comoIList<>
eICollection<>
, não existe uma interface não genérica única a partir da qual oIDictionary<TKey,TValue>
herda.