我试图使用TryGetValue
。
在Method
内调用委托我使用字典选择一个委托,然后调用它。
字典类型是
Dictionary<string, Action<Mesh>> _meshActions;
,操作类型为
Action<Mesh>
所以在这里似乎我无法正确地在委托参数中声明action
。
Method(null, "mesh", ( action => //How to specify type of action
{
_meshActions.TryGetValue(_reader.LocalName, out action);
try { action(mesh); }
catch
{
//do nothing
}
}));
编译器期望out
类型为Action<Mesh>
,但如何设置action
类型?
在使用TryGetValue
之前我通常使用字典
但是因为有时候 Key not found 会出错,所以我决定使用TryGetValue
这是没有TryGetValue的代码,如果找到所有的密钥,则工作正常。
Method(null, "mesh", () => _meshActions[_reader.LocalName](mesh));
编辑:请注意,action
在委托之外并不是什么。我只想在TryGetValue中发送参数并使用它的resault。
这是Method
private static void Method(string enterElement, string exitElement, Action loadElement)
{
while (_reader.Read())
{
if (StateElement(State.Enter, enterElement))
{
loadElement.Invoke();
}
else if (StateElement(State.Exit, exitElement))
{
return;
}
}
}
答案 0 :(得分:2)
action
需要在委托中本地声明,而不是作为参数声明。
Method(null, "mesh", ( () => //How to specify type of action
{
Action<Mesh> action;
_meshActions.TryGetValue(_reader.LocalName, out action);
try { action(mesh); }
catch
{
//do nothing
}
}));