在初始化C#

时间:2016-08-09 15:29:56

标签: c# dictionary delegates arguments action

我有Dictionary,其中KeyCode为关键字,Action<int>为值,但我想在字典初始化时给出Action参数像这样:

    someDictionary = new Dictionary<KeyCode, Action<int>>()
    {
        {KeyCode.Alpha1, GoToCameraPosition(0) },
    };

我该怎么做?

1 个答案:

答案 0 :(得分:3)

这称为currying。请注意,Dictionary的第二个类型参数已从原始参数更改:您创建的操作没有参数,因为它调用的操作的参数内置于存储在字典中的匿名lambda中。

someDictionary = new Dictionary<KeyCode, Action>()
{
    {KeyCode.Alpha1, () => GoToCameraPosition(0) },
};

这样打电话:

KeyCode key = KeyCode.Alpha1;
Action act = null;

if (someDictionary.TryGetValue(key, out act))
{
    //  act is a method that calls GoToCameraPosition(0)
    act();
}

或者

foreach (var kvp in someDictionary)
{
    kvp.Value();
}

或者,如果你确定它在那里......

someDictionary[KeyCode.Alpha1]();