我有一個枚舉,其中有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問題。你真的想達到什麼目的?目前你猜測枚舉和類似枚舉的方法是解決方案。但如果我們知道你真正想做什麼,那麼可能會有更清潔的方法。 –