У меня есть перечисление действий, которые я хочу запустить:
public enum theActions
{
action1,
action2
}
Я хочу сохранить их в словаре:
public Dictionary<theActions, Action> _theActions { get; }
_theActions = new Dictionary<theActions, Action>
{
[theActions.action1] = () => action1Func()
};
Я бы имел свои функции, для каждого действия:
public void action1Func(int inParam)
{
//do whatever
}
Позже мне нужно будет вызвать одну из функций:
public void execAction(int inVar, Action action)
{
//inVar isn't the parameter I want to pass to the action. It's used, for something else.
action();
}
execAction(1, _theActions[theActions.action1]);
Я не уверен, как изменить свой кодзаставить действие принимать параметры везде, и что, если мне нужно одно действие, для которого не нужен параметр?Должен ли я добавить фиктивный параметр в эту функцию?
Я получил это до сих пор:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public enum theActions
{
action1,
action2
}
public Dictionary<theActions, Action<int>> _theActions { get; }
public void execAction(int inVar, Action<int> action)
{
//inVar isn't the parameter I want to pass to the action. It's used, for something else.
// action();
}
public Form1()
{
InitializeComponent();
_theActions = new Dictionary<theActions, Action<int>>
{
[theActions.action1] = (Action<int>)((int x) => action1Func(x))
};
}
public void action1Func(int inParam)
{
//do whatever
MessageBox.Show($"Hello ... inParam : {inParam}");
}
private void button1_Click(object sender, EventArgs e)
{
//This works manually
_theActions[theActions.action1].Invoke(12);
//But, I want the execAction to work
//execAction(1, _theActions[theActions.action1]);
}
}
}
Он работает, вызывая его вручную.Мне просто нужна помощь, чтобы войти в execAction () и запустить его.Итак, закройте.