Quiero probar un objeto para ver si implementa IDictionary<TKey,TValue>
, pero no me importa qué TKey
y TValue
sean.Pruebe si un objeto implementa una interfaz genérica para cualquier tipo genérico
puedo probar si es una instancia concreta del marco Dictionary<,>
así:
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
pero no puedo pensar en una manera de probar algo que implementa IDictionary<,>
. Esta técnica no funciona para la interfaz; IsAssignableFrom
devuelve falso si pruebo contra el tipo base genérico IDictionary<,>
, que parece extraño ya que funciona para el tipo concreto.
Normalmente usaría is
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 como IList<>
y ICollection<>
, no existe una interfaz única no genérica de la que hereda el genérico IDictionary<TKey,TValue>
.
Me gusta. ¿Cómo pasé por alto GetInterfaces? –