[英]How can I initialise a Dictionary with delegate elements?
我想創建一個 static 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> _statementProcessors =
new Dictionary<Statement.Types, _processStatement>() {
{ Statement.Types.Increment, Increment }
}
}
private void Increment(Statement s) {}
}
這給了我錯誤
集合初始化程序的最佳重載 Add 方法 'Dictionary<Statement.Types, Machine._processStatement>.Add(Statement.Types, Machine._processStatement)' 有一些無效的 arguments
我不完全理解。
甚至有可能,我想要達到的目標嗎? 還是我必須在構造函數中初始化它?
在構造函數中添加它時更新我得到這個運行時錯誤:
已添加具有相同密鑰的項目。 鍵:增量
看看這段代碼:
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 static,但Increment
是MyClass
的實例方法。 想一想——這將如何運作? 為了調用Increment
,需要實例化MyClass
,但您希望在此之前訪問它。
你的第一個例子是正確的......
或者,您可以Increment
static:
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 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
的 static 實例:
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) { }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.