我想知道是否有一种方法在C#执行一个方法,如果我们只有它的名称在一个字符串?如何评估一个函数传递的字符串在C#
string methodname="method"
this.RunMethod(methodname)
这样的事情?
谢谢:)
我想知道是否有一种方法在C#执行一个方法,如果我们只有它的名称在一个字符串?如何评估一个函数传递的字符串在C#
string methodname="method"
this.RunMethod(methodname)
这样的事情?
谢谢:)
您可以创建一个通用的方法来调用在任何情况下他们的名字方法,你要这样说:
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);
}
喜欢的东西
Type type = GetType("MyType");
MethodInfo methodInfo = type.GetMethod(methodName);
methodInfo.Invoke()
我用seomthing这样的:
typeof(StringValidator<T>).GetMethod(restriction.Operacion.Nombre).Invoke(null, param) as IList<T>;
基于包含的方法(StringValidator)之类的类型,然后我得到方法由它的名字限制.Operacion.Nombre,并调用它。
希望它有助于
This example有你在找什么,即:
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
(显然,这可能取决于返回类型等改变)试试这个:
Type t = Type.GetType(typeName);
t.InvokeMember("method", BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
只适用于静态方法。 OP正在尝试调用实例方法。 – spender 2012-04-26 13:40:33
如果方法不是st,则需要类型,方法名称和实例ATIC
您可以用扩展方法做到这一点非常漂亮:
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");
}
}
这将根据提供的PARAMS选择合适的过载,所以上面的代码给出的输出:
INT甲称为
串一个名为
I L为OP提供了更好的错误处理。
你需要的类型名称也 – 2012-04-26 13:36:53
和关键字搜索是'反射' – 2012-04-26 13:37:39
@AdrianIftode:类型将是'this.GetType()' – spender 2012-04-26 13:37:54