2010-03-22 13 views

Respuesta

16

MethodBase se utiliza como una clase base de MethodInfo que tiene una propiedad ReturnType.

Se podría tratar de molde a una instancia de MethodInfo y comprobar que la propiedad.

+0

¿Qué pasa si queremos encontrar desde MemberInfo. Supongamos este escenario en el que queremos filtrar todos los miembros, como los métodos y los campos que son/devolviendo el tipo de cadena. ¿Tiene MemberInfo alguna propiedad para indicar eso? –

21

MethodBase en sí no tiene un tipo de retorno porque además de métodos normales también se utiliza para representar métodos, tales como constructores, que no tienen tipo de retorno. En su lugar, necesita ver si es una instancia de MethodInfo y verificar que para la propiedad ReturnType.

CompileTimeValidate(MethodBase method) { 
    var normalMethod = method as MethodInfo; 
    if(normalMethod != null) { 
    ValidateReturnType(normalMethod.ReturnType); 
    } 
} 
1

Pruebe algo como esto. MethodInfo tiene la propiedad, pero MethodBase también se utiliza para constructores, y no tienen un tipo de devolución.

MethodBase b = this.GetType().GetMethods().First(); 
if(b is MethodInfo) 
    MessageBox.Show((b as MethodInfo).ReturnType.Name); 
+2

Punto menor ... si ya está comprobando que 'b es MethodInfo', entonces un molde directo' (MethodInfo) b' es ligeramente preferible a 'b como MethodInfo'. –

+0

¿Por qué? :) ... –

+2

La guía que sigo: Use 'as' cuando reciba un nulo (para un tipo incompatible) es aceptable para su código. En este caso, dado que un valor nulo es * no * aceptable dentro de if, use '(MethodInfo) b' en su lugar. Mejor aún, evite el costo de hacer el reparto dos veces usando 'as' en lugar de' is' y probando contra null. – Bevan

Cuestiones relacionadas