能够从枚举中调用函数吗? C#

时间:2018-03-31 16:58:04

标签: c# function enums callback procedure

基本上,我希望有一个枚举,其中每个常量引用一个函数(更多的是一个过程,但因为它没有返回任何东西)

enum Example {first_function, second_function, third_function};

void first_function (){
}
... you get the hang of it

有没有一种方法可以从枚举中调用这样的函数?

提前谢谢你,对不起,我刚开始学习;)

2 个答案:

答案 0 :(得分:0)

您可以使用键创建一个包含枚举值的字典,并为要调用的函数赋值。对此方法的唯一限制是,您要调用的所有方法都应具有相同的签名。

如果枚举如下:

enum Example { FirstFunction, SecondFunction, ThirdFunction }

并且方法没有得到任何参数而且它们什么都没有返回(无效),你可以尝试这样的事情:

var dictionary = new Dictionary<Example, Action>
{
    { Example.FirstFunction, FirstFunction },
    { Example.SecondFunction, SecondFunction },
    { Example.ThirdFunction, ThirdFunction }
};

然后你可以找到枚举值的方法并按如下方式调用它:

dictionary[Example.FirstFunction]();

显然你的方法可以返回你想要的任何类型,并获得你想要的任意数量的参数。但是,它们必须具有相同的签名(返回类型和参数)。

答案 1 :(得分:0)

您无法使用enum来指定某个功能,但如果您的所有功能都具有相同的签名,那么您可以从Dictionary到{{1}制作enum }与相应的参数:

Action<...>

您现在可以这样称呼它:

void Function1(int val) {
    ...
}
void Function2(int val) {
    ...
}
void Function3(int val) {
    ...
}

static readonly IDictionary<MyEnumType,Action<int>> MyEnumToAction = new Dictionary<MyEnumType,Action<int>> {
    [first_function] = Function1,
    [second_function] = Function2,
    [thrird_function] = Function3
};