Tengo una IList<Delegate>
que contiene algunos Func<bool>
s y algunos Predicate<T>
s, donde T
varía. Más tarde necesito aclarar cuáles de estos elementos son Predicate<T>
s, pero no quiero cerrar la puerta para agregar otros tipos de Delegate
a la lista más adelante, así que no quiero hacer esto identificando objetos por !(current_delegate is Func<bool>)
.Determinar si el objeto es cualquier predicado <T>
El más alto de abstracción por debajo Predicate<T>
es MulticastDelegate
, que parece poco útil (necesitaría un no genérico Predicate
tipo bajo Predicate<T>
), y la identificación de la presencia del parámetro genérico también es inútil dadas las otras genéricos Delegate
s que pueden estar presentes en la lista.
La única otra cosa que he considerado es verificar el Name
del Type
. Para mí, la comparación de cuerdas es casi un olor, pero tal vez esa es la mejor y/o única forma - díganme.
¿Cuál es la mejor manera de determinar definitivamente que un object
es cualquier Predicate<T>
sin conocer el tipo de T
?
Perfección. Una de esas cosas que probablemente voy a encontrar un buen uso para al menos semanalmente. – Jay
Sí, pero prepárate para atrapar la 'InvalidOperationException' que se lanzará para los tipos de delegados no genéricos, lo que parece una posibilidad futura. Para evitar la molestia, marca 'Type.IsGenericType' antes de llamar a este método. –