¿Cómo verificar si un objeto tiene cierto método / propiedad?

¿Usando un patrón dynamic tal vez? Puede llamar a cualquier método / propiedad usando la palabra clave dinámica, ¿verdad? ¿Cómo verificar si el método existe antes de llamar a myDynamicObject.DoStuff (), por ejemplo?

    Podrías escribir algo así:

     public static bool HasMethod(this object objectToCheck, string methodName) { var type = objectToCheck.GetType(); return type.GetMethod(methodName) != null; } 

    Editar: incluso puedes hacer un método de extensión y usarlo así

     myObject.HasMethod("SomeMethod"); 

    a través de la reflexión

      var property = object.GetType().GetProperty("YourProperty") property.SetValue(object,some_value,null); 

    Similar es para los métodos

    Es una vieja pregunta, pero me encontré con eso. Type.GetMethod(string name) arrojará una AmbiguousMatchException si hay más de un método con ese nombre, entonces manejaremos mejor ese caso

     public static bool HasMethod(this object objectToCheck, string methodName) { try { var type = objectToCheck.GetType(); return type.GetMethod(methodName) != null; } catch(AmbiguousMatchException) { // ambiguous means there is more than one result, // which means: a method with that name does exist return true; } } 

    ¿No sería mejor no usar ningún tipo dynamic para esto y permitir que su clase implemente una interfaz? Luego, puede verificar en tiempo de ejecución si un objeto implementa esa interfaz y, por lo tanto, tiene el método (o propiedad) esperado.

     public interface IMyInterface { void Somemethod(); } IMyInterface x = anyObject as IMyInterface; if( x != null ) { x.Somemethod(); } 

    Creo que esta es la única forma correcta.

    A lo que te refieres es a escribir patos, lo cual es útil en escenarios en los que ya sabes que el objeto tiene el método, pero el comstackdor no puede verificarlo. Esto es útil en escenarios de interoperabilidad COM por ejemplo. (ver este artículo)

    Si desea combinar el tipado de pato con la reflexión, por ejemplo, creo que se está perdiendo el objective de escribir patos.