我有一个包含多个方法的Object,在它之外我有一个字符串列表,其中每个字符串值都是Method的名称。我想基于名称执行该方法。从expirience,在python中它是致命的简单。在c#中,我认为它应该与我所支持的代表一起完成。或者使用methodInvoking? 我想忽略对这一点的反思。
我可以将方法存储为对象,因为它是一个对象。
def a():
return 1
def b():
return 2
def c():
return 3
l= [a,b,c]
for i in l:
print i()
输出结果为:
>>> 1
>>> 2
>>> 3
答案 0 :(得分:4)
如果要忽略反射,可以为每个方法调用创建一个委托并存储在一个字典中。
你是怎么做的:
var methods = new Dictionary<string, Action >() {
{"Foo", () => Foo()},
{"Moo", () => Moo()},
{"Boo", () => Boo()}
};
methods["Foo"].Invoke();
答案 1 :(得分:0)
请注意,在Python示例中,您不是“[执行]基于包含其名称的字符串的方法”,而是将该方法添加到集合中。
你可以在C#中用Python做基本相同的事情。看看Func delegate。
class FuncExample
{
static void Main(string[] args)
{
var funcs = new List<Func<int>> { a, b, c };
foreach (var f in funcs)
{
Console.WriteLine(f());
}
}
private static int a()
{
return 1;
}
private static int b()
{
return 2;
}
private static int c()
{
return 3;
}
}
,输出
1
2
3
如果你需要根据字符串的名称执行一个函数,Uri-Abramson's answer to this very question是一个很好的起点,不过你可能想重新考虑不使用反射。