gpt4 book ai didi

c# - 委托(delegate).DynamicInvoke

转载 作者:行者123 更新时间:2023-11-30 22:27:28 27 4
gpt4 key购买 nike

我想通过存储在列表中的方法名称来调用方法。谁能帮忙?我是 c# 新手!

{
delegate string ConvertsIntToString(int i);
}

class Program
{
public static List<String> states = new List<string>() { "dfd","HiThere"};
static void Main(string[] args)
{
ConvertsIntToString someMethod = new ConvertsIntToString(states[1]);
string message = someMethod(5);
Console.WriteLine(message);
Console.ReadKey();
}
private static string HiThere(int i)
{
return "Hi there! #" + (i * 100);
}
}

最佳答案

看起来您根本不需要 Delegate.DynamicInvoke - 您不是在尝试动态调用它 - 您是在尝试创建 动态委托(delegate),你可以用 Delegate.CreateDelegate 来做.基于您的示例的简短但完整的程序(但不使用列表 - 此处不需要):

using System;
using System.Reflection;

delegate string ConvertsIntToString(int i);

class Program
{
static void Main(string[] args)
{
// Obviously this can come from elsewhere
string name = "HiThere";

var method = typeof(Program).GetMethod(name,
BindingFlags.Static |
BindingFlags.NonPublic);
var del = (ConvertsIntToString) Delegate.CreateDelegate
(typeof(ConvertsIntToString), method);

string result = del(5);
Console.WriteLine(result);
}

private static string HiThere(int i)
{
return "Hi there! #" + (i * 100);
}
}

显然,如果您想要的方法是不同的类型,或者是实例方法,或者是公共(public)的,则需要对其进行调整。

关于c# - 委托(delegate).DynamicInvoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269876/

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