首页 > 解决方案 > 如何以编程方式更改我调用的函数名称

问题描述

我正在尝试根据组合框中的信息调用函数。用户将更改组合框,在此过程中,我们根据组合框文本中的数据和固定文本调用一个函数。我正在尝试这样做,所以每次我们得到一个新版本时,我只需添加一个文件夹,而不必像在 case 语句中那样进入代码来添加新的函数名称。

组合框的文本为

v6.1
v6.4 
v7.2
v8.6

等等

我要调用的函数名为 Getinfo_,并添加了组合框中的文本和 . 替换为 _ 例如,我会从组合框中选择 v6.1,这样做我会调用名为 Getinfo_v6_1 的函数

经过大量思考搜索和尝试,我已经接近但还不够接近。我想我需要使用反射(也许不需要)和

private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e)
{
    Type t = this.GetType(); //need to get the type
    MethodInfo method = t.GetMethod("Getinfo" + cmbobx_version.Text.Replace('.', '_'));   //put together function name
     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters
}

不幸的是,这在调用时停止,说该方法为 NULL,我不明白为什么这会如此不同,也许我完全误解了我在做什么。

我想调用的函数看起来有点像下面

public void Getinfo_v6_1(ComboBox inFocusComboBox, string action)
{
  switch (inFocusComboBox.Text)
        {
           case "Red": Price = 11254; break;
           case "Blue": Price = 11278; break;
           case "Green": Price = 11354; break;
         }
}


public void Getinfo_v6_4(ComboBox inFocusComboBox, string action)
{
   switch (inFocusComboBox.Text)
        {
            case "Red": Price = 254; break;
            case "Blue": Price = 278; break;
            case "Green": Price = 354; break;
          }
}

即使您有更好的方法来做我需要做的事情,所有帮助都将不胜感激。

标签: c#functioncombobox

解决方案


您应该阅读设计模式,例如,您可以使用模板设计模式创建实现您的功能的多态项。尽量避免反射,因为它“慢”且不安全。


推荐阅读