Когда я вижу «динамические клавиши», я думаю, что для чего-то еще, типа типа dynamic
, будет ключом для словаря. Однако то, что вам нужно, можно легко достичь. В C# «указатели на функции» называются delegates
(но лучше, чем C-указатели на функции), поэтому вам нужен словарь, который имеет тип char
как ключ и один из этих делегатов как значение. В. NET Framework 4.0 и выше есть предопределенные общие делегаты, называемые Func<T...>
и Action<T...>
. В принципе, если вы хотите, чтобы ваша функция вернула значение, вы будете использовать Func
, а Action
будет использоваться вместо метода void
.
Таким образом, вы можете иметь что-то вроде этого:
var keyMap = new Dictionary<char, Func<string, bool>>()
{
{'w', MoveUp},
{'s', MoveDown},
{'a', s => true}, // using lambda expression
{
'd', delegate(string s)
{
if (string.IsNullOrWhiteSpace(s) == false)
{
//
}
return true;
}
} // using anonymous method
};
// then you can call those like this
var allow = keyMap['w']("some input");
if (allow)
{
// ....
}
public bool MoveUp(string input)
{
return true;
}
public bool MoveDown(string input)
{
return true;
}
Вот документы https://msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx
ли вы имеете в виду клавиатуры ключа? – Stefan
Вы пытались использовать словарь, например 'System.Collections.Generic.Dictionary' уже? –
ViRuSTriNiTy
Вы имеете в виду вызов функции, основанной на вызванном ключе? I.Е храня что-то вроде делегата или Action? – plusheen