我有一个枚举,其中有30个项目。每个项目具有相同的名称相应的功能。我希望能够通过在某个位置引用枚举来调用该函数。使用枚举项来调用方法
因此,如果在enum[0] = Foo
的价值,我希望能够通过使用类似enum(0)("foobar")
到底点我运行的每个功能,像这样一个任务来调用Foo(string bar)
:
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());
难道这东西,是即便possibl è?
编辑:
枚举涉及控件的窗体上,所以我有textboxs,标签阵列和被填充了的函数的结果的价格的一个阵列:
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线填充任务阵列
你可以通过反射来做到这一点,但你真的*确保将函数名存储在一个枚举中是一个不错的选择? – Lennart
您将不得不使用反射来基于枚举值的名称找到基于方法名称的“MethodInfo”。然后你可以使用反射来调用它。你可以把它包装在一个方法中,并通过传入枚举和参数来调用它。请注意,这些参数在方法之间不应有差异。 – Igor
Noooooo!希望这是不可能的。这听起来像是一个XY问题。你真的想达到什么目的?目前你猜测枚举和类似枚举的方法是解决方案。但如果我们知道你真正想做什么,那么可能会有更清洁的方法。 –