Estoy tratando de verificar si un tipo determinado es un delegado de acción, independientemente de la cantidad de parámetros.Comprobando si un cierto tipo es un delegado de Acción
El siguiente código es la única forma en que sé cómo hacerlo.
public static bool IsActionDelegate(this Type source)
{
return source == typeof(Action) ||
source.IsOfGenericType(typeof(Action<>)) ||
source.IsOfGenericType(typeof(Action<,>)) ||
....
source.IsOfGenericType(typeof(Action<,,,,,,,,,,,,,,,>));
}
IsOfGenericType()
es otro método de extensión de mina, que hace lo que dice, se comprueba si el tipo es del tipo genérico dado.
¿Alguna mejor sugerencia?
No sé si buscar por nombre es tan malo dado que el nombre proviene de un espacio de nombre de la biblioteca y no de un código de usuario. –
¡Gran idea, gracias! Estoy tratando de hacer un método delegate.CreateDelegate genérico. P.ej. 'CreateDelegate> (propietario, método);' Es un trabajo en progreso, así que aún no sé si será posible. Pero es por eso que necesito analizar el parámetro genérico y verificar qué tipo de delegado se espera. –
@Ritch: me recuerda haber comprobado el tipo de navegador en javascript en lugar de chequeo de funciones: el último es mucho más limpio. Tal vez injustificado en este caso, pero no tocaría el nombre si no fuera absolutamente necesario. – BrokenGlass