听起来您只想拥有一个Dictionary<string, Action>
可以与 lambda 函数连接的函数:
var actions = new Dictionary<string, Action>();
actions.Add("Foo", () => Console.WriteLine("Bar!"));
Car myCar = new Car();
actions.Add("Vroom", () => myCar.Drive());
actions["Foo"](); //prints "Bar!"
actions["Vroom"](); //invokes myCar.Drive
这样,所有不同的签名、对象引用、静态方法或任何由 lambda 及其闭包语义处理的东西。
如果您希望能够将一些上下文或输入传递给集合,您可以提供一个无类型的context
对象,您可以在注册方法时对其进行转换。代替无参数Action
,您将拥有一个Action<object>
:
var actions = new Dictionary<string, Action<object>>();
var JuanLuisSoldi = new Person();
actions.Add("Lunch Time", context => JuanLuisSoldi.Eat((Food)context));
Food lunch = new Apple();
actions["Lunch Time"](lunch);