首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查对象是否有特定的方法/属性?

如何检查对象是否有特定的方法/属性?
EN

Stack Overflow用户
提问于 2011-02-25 14:53:10
回答 5查看 168.2K关注 0票数 170

也许使用动态模式?您可以使用dynamic关键字调用任何方法/属性,对吗?例如,在调用myDynamicObject.DoStuff()之前,如何检查该方法是否存在?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-25 14:59:35

你可以这样写:

代码语言:javascript
复制
public static bool HasMethod(this object objectToCheck, string methodName)
{
    var type = objectToCheck.GetType();
    return type.GetMethod(methodName) != null;
} 

Edit :你甚至可以做一个扩展方法,并像这样使用它

代码语言:javascript
复制
myObject.HasMethod("SomeMethod");
票数 242
EN

Stack Overflow用户

发布于 2011-02-25 14:57:40

通过反射

代码语言:javascript
复制
 var property = object.GetType().GetProperty("YourProperty")
 property.SetValue(object,some_value,null);

类似的是for方法

票数 95
EN

Stack Overflow用户

发布于 2014-07-04 07:55:32

这是一个古老的问题,但我只是碰巧遇到了它。如果有多个方法具有该名称,则Type.GetMethod(string name)将抛出AmbiguousMatchException,因此我们最好处理这种情况

代码语言:javascript
复制
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;
    }
} 
票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5114469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档