1

我有一个包含几个方法的对象,在它之外我有一个字符串列表,其中每个字符串值都是方法的名称。我想根据名称执行方法。从经验来看,在 python 中它非常简单。在 c# 中,我假设它应该由我认为的委托来完成。还是使用methodInvoking?我想忽略对此的反思。

在 python 中,您可以将方法存储为对象,因为它是一个对象。

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
4

2 回答 2

4

如果要忽略反射,可以为每个方法调用创建一个委托并存储在 Dictionary 中。

以下是您的操作方法:

var methods = new Dictionary<string, Action >() {
            {"Foo", () => Foo()},
            {"Moo", () => Moo()},
            {"Boo", () => Boo()}
        };

methods["Foo"].Invoke();
于 2013-05-22T08:55:03.373 回答
0

请注意,在您的 Python 示例中,您不是“[执行]基于包含其名称的字符串的方法”,而是将该方法添加到集合中。

您可以在 C# 中执行与在 Python 中执行的操作基本相同的操作。看看Func 代表

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 对这个问题的回答是一个很好的起点,尽管您可能想重新考虑不使用反射。

于 2013-05-22T09:48:05.267 回答