C#-修剪switch语句

我一直在尝试使我正在工作的项目更具可读性,因为UI类看起来像一团糟.我面临的新问题是StatusStrip,MenuStrip和ToolStrip控件.

由于每个按钮都需要执行不同的操作,因此目前这是通过switch语句来控制的,下面是一个示例:

switch (e.ClickedItem.Text.ToLower())
{
    case "find":
        {
            Find find = new Find(customTextBox1);
            find.Show();
            break;
        }
    case "undo":
        {
            customTextBox1.Undo();
            break;
        }
    case "redo":
        {
            customTextBox1.Redo();
            break;
        }
    case "cut":
        {
            customTextBox1.Cut();
            break;
        }
    case "copy":
        {
            customTextBox1.Copy();
            break;
        }
    case "paste":
        {
            customTextBox1.Paste();
            break;
        }
    case "delete":
        {
            customTextBox1.SelectedText = "";
            break;
        }
    case "refresh":
        {
            RefreshData();
            break;
        }
    case "select all":
        {
            customTextBox1.SelectAll();
            break;
        }
}

上面的代码仅用于一个项目,因此,假设有20个项目,每个项目有5-10个子项目.

正如您所看到的,我已经清理了案例方法,现在它们大多数是单行的,但仍然有那么多子项目,只是感觉应该是一种更好的方法.因此,理想情况下,我正在寻找一种处理此问题的新方法.

提前致谢.

解决方法:

您可以使用以下代码,但是必须确保该字符串与函数名称完全相同

switch (e.ClickedItem.Text.ToLower())
{
    case "find":
        Find find = new Find(customTextBox1);
        find.Show();
        break;
    case "undo": case "redo": case "cut": case "copy": case "paste": case "select all":
        Type thisType = customTextBox1.GetType();
        MethodInfo theMethod = thisType.GetMethod(e.ClickedItem.Text.ToLower());
        theMethod.Invoke(customTextBox1, userParameters);
        break;
    case "delete":
        customTextBox1.SelectedText = "";
        break;
    case "refresh":
        RefreshData();
        break;
}
上一篇:c#-如何在FtpWebRequest中使用被动模式并修复.Net 3.5中的PASV错误并通过代码定义端口范围


下一篇:C#-应用程序登录网站失败