我之前见过用户解决这个问题,比如在线程中: C# very dynamic invocation
但是我给出的代码没有取得多大成功。我基本上试图使用一些变量字符串来调用方法。
这是我到目前为止所拥有的。
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Model : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string TargetMethod = "Index";
Type t = System.Type.GetType("_Model");
System.Reflection.MethodInfo methodInfo = t.GetMethod(TargetMethod);
methodInfo.Invoke(t, new object[] {});
}
protected void Index(){
Response.Write("Index: Dynamically called!");
}
}
在视图页面上,我应该看到字符串“Index:动态调用!”写在屏幕上,但我收到错误:
异常详细信息:System.NullReferenceException:不是对象引用 设置为对象的实例。
请帮助,谢谢。
答案 0 :(得分:3)
默认情况下,GetMethod
仅返回public
个方法;添加BindingFlags.NonPublic | BindingFlags.Instance
,它应该有用。
var methodInfo = t.GetMethod(TargetMethod,
BindingFlags.NonPublic | BindingFlags.Instance);
或为公共 和 非公开工作:
var methodInfo = t.GetMethod(TargetMethod,
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
另外:它是一个实例方法,你想在当前实例上调用它,所以:
methodInfo.Invoke(this, new object[] {});
请注意this
,而不是t
。