【发布时间】:2011-01-28 20:42:25
【问题描述】:
我完全陷入了反射问题,我认为这不是什么大问题,但我没有找到任何解决方案。
public class myClass : myClassIF {
public myClass() { }
private void doSomething_A() {
//...
}
private void doSomething_B() {
//...
}
public void DecideAndCall(string identifier) {
string methodName = "doSomething_" + identifier;
MethodInfo mi = this.GetType().GetMethod(methodName); //here i got a NullReference??
//here should be the Invocation of the Method and so on...
}
}
界面是这样的:
public interface myClassIF {
void DecideAndCall(string identifier);
}
如果我调用 GetMethod("...")-Method,我总是得到一个 NullReference。我无法理解这一点,因为在该项目的其他部分中,我之前已经这样做过。但是我在那里使用了对另一种类型的反射,而不是“这个”。
是否可以在实际实例化的对象中反映方法?我想我应该是,但我不知道如何......
非常感谢! 本尼
【问题讨论】:
-
你怎么打电话给
DecideAndCall?你确定是通过“A”还是“B”?如果找不到该方法,GetMethod 将抛出 ArgumentNullException,这可能是您所看到的吗?或者,将语句分解为几个步骤,以找出抛出 Null 引用的部分。 -
当我像这样运行您的代码时,我没有得到空引用异常:
var instance = new myClass(); instance.DecideAndCall("A");,即使我用例如替换"A""C"或null。您能否创建一个重现异常的新项目? -
虽然这不能回答这个问题,但根据每个类中提供的标识符进行切换不是更好。与简单的 switch 相比,使用反射来做类似的事情会非常慢,尽管我意识到它可能没有那么快编码。
标签: c# reflection