如何基于包含其名称的字符串执行方法

时间:2013-05-22 08:45:45

标签: c# delegates

我有一个包含多个方法的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

2 个答案:

答案 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是一个很好的起点,不过你可能想重新考虑不使用反射。