gpt4 book ai didi

c# - 在 C# ASP.NET 中动态调用方法

转载 作者:行者123 更新时间:2023-11-30 16:19:12 25 4
gpt4 key购买 nike

我以前见过用户解决这个问题,比如在线程中: 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!");
}

}

在 View 页面上,我应该看到字符串“Index: Dynamically called!”写入屏幕但出现错误:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

请帮忙,谢谢。

最佳答案

默认情况下,GetMethod 只返回public 方法;添加 BindingFlags.NonPublic | BindingFlags.Instance 它应该可以工作。

var methodInfo = t.GetMethod(TargetMethod,
BindingFlags.NonPublic | BindingFlags.Instance);

或为公共(public)非公共(public)工作:

var methodInfo = t.GetMethod(TargetMethod,
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

另外:它是一个实例方法,你想在当前实例上调用它,所以:

methodInfo.Invoke(this, new object[] {});

注意 this,而不是 t

关于c# - 在 C# ASP.NET 中动态调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15433621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com