指定委托参数的类型

时间:2015-06-10 20:29:04

标签: c# dictionary delegates action trygetvalue

我试图使用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;
            }
        }
    }

1 个答案:

答案 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 
        }
    }));