我想知道 C# 中是否有一种方法可以执行方法,如果我们只有它的名称在字符串中?
string methodname="method"
this.RunMethod(methodname)
类似的东西?
谢谢 :)
尝试这个:
Type t = Type.GetType(typeName);
t.InvokeMember("method", BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
就像是
Type type = GetType("MyType");
MethodInfo methodInfo = type.GetMethod(methodName);
methodInfo.Invoke()
我用了这样的东西:
typeof(StringValidator<T>).GetMethod(restriction.Operacion.Nombre).Invoke(null, param) as IList<T>;
基于包含方法(StringValidator)的类的类型,然后我通过它的名称restriction.Operacion.Nombre 获取方法,然后调用它。
希望能帮助到你
这个例子有你正在寻找的东西,即:
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
(显然,这可能会根据返回类型等而改变。)
如果方法不是静态的,则需要类型、方法名称和实例
您可以创建一个泛型方法,以在您想要的任何实例上按名称调用方法:
public void RunMethodOn(object obj, String methodName,params Object[] args)
{
if(obj != null)
{
System.Reflection.MethodInfo method = null;
method = obj.GetType().GetMethod(methodName);
if (method != null)
method.Invoke(obj, args);
}
}
并根据您的要求使用它来调用您自己的实例上的方法:
public void RunMethod(String methodName,params Object[] args)
{
ExecuteOn(this, methodName, args);
}
您可以使用扩展方法很好地做到这一点:
public static class MethodEx
{
public static void RunMethod(
this object target,
string methodName,
params object[] values)
{
var type=target.GetType();
var mi =
type.GetMethod(methodName,values.Select(v=>v.GetType()).ToArray());
mi.Invoke(target,values);
}
}
...并按如下方式使用它:
void Main()
{
var m=new Monkey();
m.RunMethod("A",1);
m.RunMethod("A","frog");
}
class Monkey
{
public void A(int a)
{
Console.WriteLine("int A called");
}
public void A(string s)
{
Console.WriteLine("string A called");
}
}
它将根据提供的参数选择正确的重载,因此上面的代码给出了输出:
int A 调用
字符串 A 调用
我将更好的错误处理留给 OP。