我想知道在c#中是否有办法执行方法,如果我们在字符串中只有它的名字?
string methodname="method"
this.RunMethod(methodname)
那样的东西?
谢谢:)
答案 0 :(得分:2)
试试这个:
Type t = Type.GetType(typeName);
t.InvokeMember("method", BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
答案 1 :(得分:0)
像
这样的东西Type type = GetType("MyType");
MethodInfo methodInfo = type.GetMethod(methodName);
methodInfo.Invoke()
答案 2 :(得分:0)
我使用了这样的东西:
typeof(StringValidator<T>).GetMethod(restriction.Operacion.Nombre).Invoke(null, param) as IList<T>;
基于包含方法(StringValidator)的类的类型,然后我通过它的名称限制获取方法.Operacion.Nombre,并调用它。
希望有所帮助
答案 3 :(得分:0)
This example有你想要的东西:
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
(显然这可能会根据返回类型等而改变。)
答案 4 :(得分:0)
如果方法不是静态的,您需要类型,方法名称和实例
答案 5 :(得分:0)
您可以创建一个通用方法,在您想要的任何实例上按名称调用方法:
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);
}
答案 6 :(得分:0)
使用扩展方法可以很好地完成此任务:
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 called
字符串A名为
我将更好的错误处理留给了OP。