c# – 使用枚举项来调用方法
发布时间:2020-12-15 23:48:47 所属栏目:百科 来源:网络整理
导读:我有一个包含30个项目的枚举.每个项目都有一个具有相同名称的相应功能.我希望能够通过在某个位置引用枚举来调用该函数. 因此,如果enum [0] = Foo的值,我希望能够通过使用枚举(0)(“foobar”)之类的东西来调用Foo(字符串条) 最后,重点是我将每个函数作为一个
我有一个包含30个项目的枚举.每个项目都有一个具有相同名称的相应功能.我希望能够通过在某个位置引用枚举来调用该函数.
因此,如果enum [0] = Foo的值,我希望能够通过使用枚举(0)(“foobar”)之类的东西来调用Foo(字符串条) 最后,重点是我将每个函数作为一个任务运行,如下所示: 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,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,double>>() { {Test.AA,(x) => { return 5;}},{Test.BB,(x) => { return 15; }},}; //x is your string var res = actions[Test.AA]("hello"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |