我想知道是否有一種方法在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