c# - 使用枚举项调用方法

标签 c# enums

我有一个包含 30 个项目的枚举。每个项目都有一个对应的同名函数。我希望能够通过在特定位置引用枚举来调用该函数。

因此,如果 enum[0] = Foo 的值,我希望能够通过使用类似 enum 的东西来调用 Foo(string bar) (0)("foobar")

最后一点是我将每个函数作为任务运行,如下所示:

enum Test { AA, BB, CC, DD ....}
tasks[0] = Task.Run(() => { prices[0] = AA("a string"); });
tasks[1] = Task.Run(() => { prices[1] = BB("a string"); });
tasks[2] = Task.Run(() => { prices[2] = CC("a string"); });
//for 30 tasks

我想做的是:

enum Test { AA, BB, CC, DD ....}
for (int i = 0; i < 30; i++)
{
    tasks[i] = Task.Run(() => { prices[i] = (Test)i("a string"); });
}
Task.WaitAll(tasks.ToArray());

这有可能吗?

编辑:

枚举与表单上的控件相关,因此我有一组文本框、标签和一组价格,其中填充了函数的结果:

enum Dealers { Dealer1, Dealer2 ... Dealer29, Dealer30 };

static int noOfDealers = Enum.GetNames(typeof(Dealers)).Length;
decimal[] prices = new decimal[noOfDealers];
TextBox[] textBox = new TextBox[noOfDealers];
Label[] boxes = new Label[noOfDealers];

for (int i = 0; i < noOfDealers; i++)
{
    textBox[i] = Controls.Find("txt" + (Dealers)i, true)[0] as TextBox;
    boxes[i] = Controls.Find("box" + (Dealers)i, true)[0] as Label;
    prices[i] = 0;
}

//RUN 30 TASKS TO POPULATE THE PRICES ARRAY

for (int i = 0; i < noOfDealers; i++)
{
   textBox[i].Text = "£" + prices[i].ToString();
}
//LOOP THROUGH PRICES ARRAY AND FIND CHEAPEST PRICE, THEN COLOUR THE LABEL BACKGROUND GREEN FOR THE TEXT BOX WITH THE NAME AT ENUM VALUE WHATEVER I IS

我想我只是想让我的代码尽可能简洁,任务量有可能翻倍并且不想以 60 行来填充任务数组而结束

最佳答案

我会创建字典并将枚举映射到操作:

  Dictionary<Test, Func<string,double>> actions = new Dictionary<Test, Func<string,double>>()
            {
                {Test.AA, (x) => { return 5;}},
                {Test.BB, (x) => { return 15; }},
            }; //x is your string

            var res = actions[Test.AA]("hello");

关于c# - 使用枚举项调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529730/

相关文章:

c# - 什么是基于实例的成员

c# - 索引器继承在泛型中如何工作?

angular - 带有值和显示名称的 typescript 枚举

mysql 中的 Java 枚举

objective-c - 是否可以将枚举范围限定为 Objective-C 中的类?

c# - Queue.Count 线程安全吗?

来自 C DLL 回调的 C# 跨线程 UI 操作

c# - 由于返回到输出参数 (OracleParameter),第二次插入失败

c# - 如果我有 PropertyInfo 和带有此扩展变量的对象,我可以调用扩展方法吗?

c# - 使用枚举不符合 CLS