Utilizzare il modello dinamico forse? Puoi chiamare qualsiasi metodo/proprietà usando la parola chiave dynamic, giusto? Come verificare se il metodo esiste prima di chiamare myDynamicObject.DoStuff(), ad esempio?Come verificare se un oggetto ha determinati metodi/proprietà?
risposta
Si potrebbe scrivere qualcosa di simile:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
Edit: si può anche fare un metodo di estensione e usarlo come questo
myObject.HasMethod("SomeMethod");
Non sarebbe meglio non utilizzare alcun tipo dinamico per questo e lasciare che la classe implementasse un'interfaccia. Quindi, è possibile verificare in fase di esecuzione se un oggetto implementa tale interfaccia e, quindi, ha il metodo previsto (o la proprietà).
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if(x != null)
{
x.Somemethod();
}
Penso che questo sia l'unico modo corretto.
La cosa a cui ti riferisci è la digitazione anatra, che è utile in scenari in cui sai già che l'oggetto ha il metodo, ma il compilatore non può controllarlo. Questo è utile negli scenari di interoperabilità COM, ad esempio. (controllare l'articolo this)
Se si desidera combinare la digitazione anatra con la riflessione, ad esempio, penso che manchi l'obiettivo della digitazione anatra.
e se l'oggetto può essere un oggetto fornito dal framework .NET e non posso dichiararlo per implementare qualcosa? –
Qual è il problema? È possibile verificare se l'oggetto è un tale oggetto, fornito dal framework .NET allo stesso modo –
, ad esempio, si desidera verificare se esiste un metodo "Aggiungi" in un oggetto. E l'oggetto può essere una lista
via Riflessione
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
Simile è per i metodi
Bello. Si potrebbe anche fare il GetMethod in un ciclo per ottenere la proprietà definita appropriata. – Jnr
È una vecchia domanda, ma ci ho appena provato. Type.GetMethod(string name)
getterà un AmbiguousMatchException se non v'è più di un metodo con lo stesso nome, in modo da gestire meglio quel 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. Verificare se un oggetto ha una proprietà
- 2. Come verificare se un oggetto ha un metodo particolare?
- 3. Come verificare se un oggetto ha determinate proprietà?
- 4. Come verificare se un dizionario contiene determinati tasti
- 5. Verificare se è un oggetto
- 6. Come verificare se un oggetto è definito?
- 7. Come verificare se un oggetto implementa un'interfaccia?
- 8. jQuery: Controlla se un oggetto ha classe
- 9. Verificare se Html.ValidationSummary() ha un valore
- 10. Come verificare se l'elemento ha un gestore di clic?
- 11. Come posso verificare se int [] contiene solo determinati numeri?
- 12. Numpy: come verificare se la matrice contiene determinati numeri?
- 13. Come verificare in sicurezza se un oggetto dinamico ha o no un campo
- 14. Verificare se esiste un oggetto in VBScript
- 15. Come verificare se il selettore ha qtip?
- 16. Come verificare se ngIf ha preso effetto
- 17. Come verificare se DbContext ha una transazione?
- 18. Come verificare se Handler ha un'attività attiva?
- 19. Come verificare se un oggetto è un elenco di stringhe?
- 20. Come verificare se un oggetto è un Proxy?
- 21. KVO - Come verificare se un oggetto è un osservatore?
- 22. Come verificare se grep non ha output?
- 23. Come verificare se una variabile è un oggetto Moment.js?
- 24. In groovy, c'è un modo per verificare se un oggetto ha un determinato metodo?
- 25. Jasmine per verificare se un oggetto ha un certo metodo o no
- 26. Come verificare se l'utente ha caricato un file in PHP?
- 27. Come verificare se un descrittore di file ha dati disponibili?
- 28. Come verificare se un processo ha i diritti amministrativi
- 29. Come verificare se il numero ha un decimale?
- 30. Come verificare se un ordine ha una spedizione in Magento?
Qual è il tipo di * * myDynamicObject? È una classe derivata da 'DynamicObject'? –
qualcosa dichiarato con la parola chiave dinamica –