Probar si un objeto implementa una interfaz genérica para cualquier tipo genérico

Quiero probar un objeto para ver si implementaIDictionary<TKey,TValue> pero no me importa queTKey yTValue son.

Puedo probar si es una instancia concreta del framework.Dictionary<,> Me gusta esto:

bool isDict = type.IsGenericType && 
    (typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());

pero no puedo pensar en una manera de probar algo que implementaIDictionary<,>. Esta técnica no funciona para la interfaz;IsAssignableFrom devuelve falso si pruebo contra el tipo base genéricoIDictionary<,>, lo que parece extraño ya que funciona para el tipo concreto.

Normalmente usaríasis para probar si algo implementa una interfaz, pero, por supuesto, esto solo funciona si quiero probar una interfaz genérica específica. O simplemente probaría una interfaz ancestral común, pero a diferencia de otras estructuras de datos genéricos, comoIList<> yICollection<>, no hay una interfaz no genérica única desde la cual el genéricoIDictionary<TKey,TValue> hereda

Respuestas a la pregunta(1)

Su respuesta a la pregunta