我有一个程序必须根据枚举执行一个函数,我想知道是否还有其他方法:
enum FunctionType
{
Addition = 0,
Substraction = 1,
Mutiplication = 2,
Division = 3
}
void ExecuteFunction(FunctionType Function)
{
switch(Function)
{
case FunctionType.Addition: Addition();
break;
case FunctionType.Substraction: Subsctration();
break;
...
default: ...
}
}
(这不是我正在使用的代码,它只是代表我想要做的事情)。
这种方法应该可以正常工作,但是当您有更多功能时会发生什么?我不想有 50 线交换机。所以我想知道是否有一种方法可以简化它,也许是这样的:
enum FunctionType : Action
{
Addition = new Action(Addition);
Substraction = new Action(Substraction);
....
}
void ExecuteFunction(FunctionType Function)
{
(Action)Function.Invoke();
}
无需交换机,50 条线可以变成 1 条线。但这是不可能的,只有数字类型被接受为枚举。
我认为有可能有一个List<T>
操作,但这需要在运行时将每个操作添加到列表中。
编辑:
我在源代码中找到了一种完成此操作的方法,但我无法真正理解它。这就是我得到的:
他们创造了一个定制Attribute
其中包含一个string
(方法名称)以及它们所做的方法:
[CustomAtrribute("name")]
void Method()
{
}
然后我不知道它的名字是怎么称呼的,我猜是某种反映,但我不知道如何找到有关此的信息。
EDIT2:我找到了我想要的方法,我将添加一个带有函数的接口,然后使用函数内的代码实现该接口并使用Dictionary<Enum, Interface>
来调用它。我不知道是否应该回答我自己的问题,无论如何,感谢所有帮助过我的人。