也許使用動態模式?你可以使用動態關鍵字調用任何方法/屬性,對吧?例如,如何在調用myDynamicObject.DoStuff()之前檢查方法是否存在?如何檢查對象是否具有某些方法/屬性?
回答
你可以寫這樣的事情:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
編輯:你甚至可以做一個擴展方法,並使用它像這樣
myObject.HasMethod("SomeMethod");
爲此不使用任何動態類型會更好,並讓您的類實現一個接口。然後,您可以在運行時檢查對象是否實現了該接口,並因此具有預期的方法(或屬性)。
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if(x != null)
{
x.Somemethod();
}
我認爲這是唯一正確的方法。
你所指的是鴨式打字,這在你已經知道該對象具有該方法但編譯器無法檢查該情況的場景中很有用。 例如,這在COM互操作場景中很有用。 (檢查this文章)
如果你想結合duck-typing和反射例如,那麼我認爲你錯過了鴨子打字的目標。
如果對象可以是.NET框架提供的對象,我不能聲明它實現任何東西? –
有什麼問題?您可以檢查'對象'是否是由.NET框架提供的對象,例如 –
例如,您想檢查對象中是否存在「添加」方法。並且該對象可以是列表
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
類似
是方法
不錯。您也可以在循環中執行GetMethod以獲取適當的定義屬性。 – Jnr
這是一個古老的問題,但我碰到了它。 Type.GetMethod(string name)
將拋出AmbiguousMatchException如果有一種以上的方法使用該名稱,因此我們更好地處理這種情況下
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. 如何檢查一個對象是否具有流動的某些屬性?
- 2. 檢查對象是否具有屬性
- 3. 如何驗證對象是否具有某些屬性?
- 4. 如何檢查json對象是否有一些屬性
- 5. Python:如何檢查對象的屬性是否是方法?
- 6. 如何檢查PHP對象是否具有PHP4中的屬性。
- 7. 檢查屬性是否具有屬性
- 8. 如何檢查模型是否具有某個列/屬性?
- 9. 檢測JavaScript對象是否具有引用DOM元素的某些屬性
- 10. 正確的方法來檢查對象是否具有內容屬性
- 11. 如何檢查某個方法是否具有某個屬性而不對DLL的版本敏感?
- 12. 檢查對象是否具有特定值的屬性
- 13. 的Javascript檢查對象是否具有一定的屬性值
- 14. Javascript:檢查對象是否具有屬性
- 15. 檢查NSArray是否包含具有特定屬性的對象
- 16. 如何檢查對象的某些屬性不爲空在C#
- 17. 檢查對象具有特定屬性
- 18. lodash檢查對象屬性具有值
- 19. 如何檢查對象的屬性是否有值?
- 20. Django如何檢查對象是否有視圖屬性
- 21. 檢查一個對象(具有某些屬性值)不在列表中
- 22. 檢查屬性是否具有DisplayNameAttribute
- 23. 檢查對象屬性值是否爲
- 24. 檢查對象列表是否包含具有特定屬性值的對象
- 25. 對象是否具有屬性
- 26. 查找具有某些屬性
- 27. 我可以知道AppleScript對象是否具有某個屬性?
- 28. 這是檢查一個對象是否有屬性的最佳方法
- 29. 檢查Flash對象是否具有JavaScript內的方法
- 30. c#如何檢查對象是否屬於某種類型
什麼是* myDynamicObject *類型?它是從「DynamicObject」派生的類嗎? –
用dynamic關鍵字聲明的東西 –