Uso de un patrón dinámico 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?¿Cómo verificar si un objeto tiene cierto método/propiedad?
Respuesta
Se podría escribir algo así:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
Editar: incluso se puede hacer un método de extensión y utilizar de esta manera
myObject.HasMethod("SomeMethod");
¿No sería mejor no usar ningún tipo dinámicos para esto, y dejar 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.
Lo que usted se refiere es de pato a escribir, que es útil en situaciones en las que ya se sabe que el objeto tiene el método, pero el compilador no puede comprobar para eso. Esto es útil en escenarios de interoperabilidad COM por ejemplo. (Consulte el artículo this)
Si desea combinar el pato-tipado con la reflexión, por ejemplo, creo que se está perdiendo el objetivo del pato-tipado.
¿y si el objeto puede ser un objeto proporcionado por .NET framework, y no puedo declarar que implemente algo? –
¿Cuál es el problema? Puede verificar si el 'objeto' es un objeto así, provisto por el framework .NET de la misma manera, por ejemplo, –
, desea verificar si hay un método "Agregar" en un objeto. Y el objeto puede ser una Lista
través de la reflexión
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
Similar es para los métodos
Agradable. También puede hacer GetMethod en un bucle para obtener la propiedad definida apropiada. – Jnr
Es una vieja pregunta, pero me encontré con ella. Type.GetMethod(string name)
arrojará una AmbiguousMatchException si hay más de un método con ese nombre, por lo que es mejor gestionar el 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;
}
}
- 1. ¿Cómo verificar si existe un cierto ensamblaje?
- 2. ¿Cómo puedo verificar si una lista contiene un objeto de cierto tipo? C#
- 3. ¿Cómo verificar si un objeto está definido?
- 4. Selenium IDE: ¿Cómo verificar si un elemento tiene un foco?
- 5. jQuery: compruebe si un objeto tiene clase
- 6. Cómo verificar si un proceso tiene los derechos administrativos
- 7. ¿Cómo verificar si un descriptor de archivo tiene datos disponibles?
- 8. ¿Cómo verificar si un modelo tiene una determinada columna/atributo?
- 9. Rieles: ¿Cómo puedo verificar si una columna tiene un valor?
- 10. ¿Cómo puedo verificar si se lanza un objeto?
- 11. ¿Cómo verificar si un objeto es convertible a otro tipo?
- 12. python 3: cómo verificar si un objeto es una función?
- 13. Rieles: ¿cómo validar un campo solo si otro campo tiene un cierto valor?
- 14. En el Objetivo C, ¿puede verificar si un objeto tiene una propiedad o mensaje en particular?
- 15. Verificar que un objeto tiene una cierta propiedad
- 16. ¿Cómo se prueba si un div tiene un cierto estilo CSS en rspec/capybara?
- 17. ¿Cómo encontrar un objeto de cierto tipo en un NSArray?
- 18. Use JQuery para verificar si el elemento tiene un borde?
- 19. En Django, ¿cómo puedo verificar si un usuario está en cierto grupo?
- 20. ¿Cómo verificar si el número es divisible por un cierto número?
- 21. iOS: ¿cómo verificar si una cadena tiene solo dígitos?
- 22. ¿Cómo puedo verificar si mi programa tiene datos conectados
- 23. ¿Cómo verificar con jquery si seleccionar tiene opciones?
- 24. ¿Cómo puedo verificar si mi aplicación tiene foco?
- 25. cómo verificar si div tiene id o no?
- 26. La forma más rápida de verificar si existe un objeto
- 27. Cómo comprobar si un objeto es una matriz de un cierto tipo
- 28. Comprobando si un cierto tipo es un delegado de Acción
- 29. Para verificar si un objeto está vacío o no
- 30. ¿Debo verificar si un objeto es nulo primero o segundo?
¿Cuál es el tipo de myDynamicObject * *? ¿Es una clase derivada de 'DynamicObject'? –
algo declarado con la palabra clave dinámica –