如何解决如何使用委托元素初始化字典?
我想创建一个将值映射到委托的静态 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
我不完全明白。
有没有可能,我正在努力实现什么?还是我必须在构造函数中初始化它?
已添加具有相同密钥的项目。键:增量
解决方法
看看这段代码:
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 设为静态,但 Increment
是 MyClass
的实例方法。想一想——这将如何运作?为了调用 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 举报,一经查实,本站将立刻删除。