c# – 存储对非静态方法的引用

我正在尝试创建一个值集合,每个值对应一个动作.这样,我将能够在集合中搜索特定值,然后以通用方式调用关联的操作.

所以,这是我第一次尝试:

public class CommandInfo
{
    public string Name { get; set; }
    public Action<RunArgument> Action { get; set; }
}

public class MyClass
{
    public List<CommandInfo> Commands = new List<CommandInfo>
    {
        new CommandInfo { Name = "abc", Action = AbcAction } // <== ERROR HERE
    };

    public void AbcAction(RunArgument arg)
    {
        ; // Do something useful here
    }
}

在这种情况下,Commands集合中新CommandInfo的声明给出了错误:

A field initializer cannot reference the non-static field, method, or property ‘MyNameSpace.MyClass.AbcAction(MyNameSpace.RunArgument)’

当然必须有一种方法来存储对像这样的非静态方法的引用.有人可以帮我吗?

最佳答案

Surely there must be a way to store a reference to a non-static method like this. Can someone help me out?

有,不在字段初始化程序中.所以这很好用:

public List<CommandInfo> Commands = new List<CommandInfo>();

public MyClass()
{
    Commands.Add(new CommandInfo { Name = "abc",
                                   Action = AbcAction });
}

…或在构造函数中执行整个赋值.请注意,这与代表没有任何关系 – 这是偶然的,因为你实际上是指这个.AbcAction.在其他方面,它等同于这个问题:

public class Foo
{
    int x = 10;
    int y = this.x; // This has the same problem...
}

(我希望你真的没有公共领域,当然……)

转载注明原文:c# – 存储对非静态方法的引用 - 代码日志