微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用委托元素初始化字典?

如何解决如何使用委托元素初始化字典?

我想创建一个将值映射到委托的静态 Dictionary。使用 Add效果很好:

class MyClass {
    private delegate void _processstatement(Statement statement);

    private static Dictionary<Statement.Types,_processstatement> _statementProcessors = 
           new Dictionary<Statement.Types,_processstatement>();

    public MyClass() {
           _statementProcessors.Add(Statement.Types.Increment,Increment);
    }

    private void Increment(Statement s) {}
}

但是,我想在实例化时初始化它们,如下所示:

class MyClass {
    private delegate void _processstatement(Statement statement);

    private static Dictionary<Statement.Types,_processstatement>() {
               { Statement.Types.Increment,Increment }
          }
    }
    private void Increment(Statement s) {}

}

这给了我错误

集合初始值设定项的最佳重载 Add 方法 'Dictionary.Add(Statement.Types,Machine._processstatement)' 有一些无效参数

我不完全明白。

有没有可能,我正在努力实现什么?还是我必须在构造函数中初始化它?

更新在构造函数添加它时我得到这个运行时错误

添加具有相同密钥的项目。键:增量

解决方法

看看这段代码:

class MyClass {
    private delegate void _processStatement(Statement statement);

    private static Dictionary<Statement.Types,_processStatement> _statementProcessors = 
           new Dictionary<Statement.Types,_processStatement>() {
               { Statement.Types.Increment,Increment }
          }
    }
    private void Increment(Statement s) {}
}

您希望将 Dictionary 设为静态,但 IncrementMyClass 的实例方法。想一想——这将如何运作?为了调用 Increment,需要实例化 MyClass,但您希望在它发生之前访问它。

你的第一个例子是正确的...

或者,您可以将 Increment 设为静态:

class MyClass {
    private delegate void _processStatement(Statement statement);

    private static Dictionary<Statement.Types,Increment }
          }
    }
    private static void Increment(Statement s) {}

}

或者,您可以实例化 MyClass 并引用该方法:

class MyClass
{
    private delegate void _processStatement(Statement statement);

    private static Dictionary<Statement.Types,_processStatement> _statementProcessors;

    static MyClass()
    {
        var myClass = new MyClass();
        _statementProcessors = new Dictionary<Statement.Types,_processStatement>
        {
            { Statement.Types.Increment,myClass.Increment }
        };
    }

    private void Increment(Statement s) { }
}

或者,您可以创建一个 MyClass 的静态实例:

class MyClass
{
    private delegate void _processStatement(Statement statement);

    private static MyClass Instance { get; } = new MyClass();
    private static Dictionary<Statement.Types,_processStatement> _statementProcessors = new Dictionary<Statement.Types,_processStatement>
    {
        { Statement.Types.Increment,Instance.Increment }
    };

    private void Increment(Statement s) { }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。