如何调用C#方法只有它存在?

时间:2011-01-31 22:00:02

标签: c#

这是否可能没有反射,否则反射?这在PHP中经常用于Wordpress中。

伪代码中的东西:

if (exists(object.method)) {object.method}

try {object.method} finally {...}

6 个答案:

答案 0 :(得分:18)

好吧,您可以在界面中声明它,然后使用:

IFoo foo = bar as IFoo;
if (foo != null)
{
    foo.MethodInInterface();
}

假设您可以使对象的实际类型实现接口。

否则你需要使用反射AFAIK。

(编辑:其他地方提到的动态类型也可以在.NET 4上运行,当然......但是为此捕获异常是非常讨厌的IMO。)

答案 1 :(得分:10)

您可以使用动态并捕获运行时异常:

dynamic d = 5;
try
{
    Console.WriteLine(d.FakeMethod(4));
}
catch(RuntimeBinderException)
{
    Console.WriteLine("Method doesn't exist");
}

虽然听起来更像是一个设计问题。

<强>声明
这段代码不是用的,只是一个可以做的例子。

答案 2 :(得分:7)

使用.GetType().GetMethod()检查它是否存在,然后.Invoke()检查它。

var fooBar = new FooBarClass();
var method = fooBar.GetType().GetMethod("ExistingOrNonExistingMethod");
if (method != null)
{
    method.Invoke(fooBar, new object[0]);
}

答案 3 :(得分:4)

使用C#4.0中的dynamic类型,可以执行以下操作:

dynamic obj = GetDynamicObject();
if (obj != null && obj.GetType().GetMethod("DoSomething") != null)
{
    obj.DoSomething();
}

但是,首先判断一个类型是否有方法的唯一方法是使用反射;因此,上述方法并没有真正为您带来任何好处(您也可以通过调用MethodInfo并仅GetMethod来获取Invoke

修改:如果你打算尝试调用该方法,即使它不在那里,那么Yuriy's answer可能就是你正在寻找的。我的原始答案是对您提出问题的方式的字面回答:“如果只有存在,如何调用C#方法。”

答案 4 :(得分:2)

我遇到了同样的答案,但不喜欢任何解决方案。

这是我的:

"c_item"

答案 5 :(得分:1)

你应该先修改存在。 MethodInfo[] myArrayMethodInfo = myType.GetMethods();