Existe uma maneira de determinar se um tipo genérico é criado a partir de uma definição específica de tipo genérico?

Eu tenho um método genérico:

Func<IEnumerable<T>, bool> CreateFunction<T>()

OndeT pode haver qualquer número de tipos diferentes. Este método faz um monte de coisas usando reflexão e seT é umIDictionary, independentemente do dicionárioTKey eTValue Eu preciso executar o código específico do dicionário.

Portanto, o método pode ser chamado:

var f = CreateFunction<string>();
var f0 = CreateFunction<SomePocoType>();
var f1 = CreateFunction<IDictionary<string,object>>();
var f2 = CreateFunction<Dictionary<string,object>>();
var f3 = CreateFunction<SomeDerivedDictionaryType<string,object>>();

etc.

Esclarecimento por resposta de Andy

Em última análise, eu quero saber seT herda de / implementaIDictionary mesmo seT em si éDictionary ou algum outro tipo que deriva dessa interface.

if(typeof(T) == typeof(IDictionary<,>)

não funciona porqueT é o tipo genérico, não a definição de tipo genérico.

E sem saberTKey eTValue (que não são conhecidas no momento da compilação) Não posso fazer uma comparação com nenhum tipo concreto que eu conheceria até o tempo de execução.

A única coisa que inventei é olhar o nome do tipo ou inspecionar seu método com reflexão, procurando métodos que me levariam a acreditar que é um dicionário (ou seja, procureContainsKey eget_Item)

Existe alguma maneira direta de fazer esse tipo de determinação?

questionAnswers(0)

yourAnswerToTheQuestion