在初始化 C# 时将参数传递给字典中的操作
Pass arguments to an action in dictionary at initialization C#
我有一个 Dictionary
,它有一个 KeyCode
作为键和一个 Action<int>
作为值,但是我想在初始化时给出 Action
参数像这样的字典:
someDictionary = new Dictionary<KeyCode, Action<int>>()
{
{KeyCode.Alpha1, GoToCameraPosition(0) },
};
我该怎么做?
这叫做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]();
我有一个 Dictionary
,它有一个 KeyCode
作为键和一个 Action<int>
作为值,但是我想在初始化时给出 Action
参数像这样的字典:
someDictionary = new Dictionary<KeyCode, Action<int>>()
{
{KeyCode.Alpha1, GoToCameraPosition(0) },
};
我该怎么做?
这叫做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]();