避免魔术字符串和数字

时间:2012-06-19 11:20:35

标签: c# enums menuitem magic-numbers

我正在研究过去几年由各种程序员编辑过的应用程序,我偶然发现了使用String Literals访问MenuItems的问题。

例如:在很多地方都有像

这样的代码
mainMenu.MenuItems[1].MenuItems[0].Visible=true;

mainMenu.MenuItems["View"].MenuItems["FullScreen"].Visible=true;
  1. 如何更改用于标识MenuItem的字符串并捕获它用于访问的所有位置?菜单和菜单项被声明为公共,并在整个大型应用程序中使用

  2. 什么是阻止使用这些魔术索引的正确方法。每当添加新项目或更改名称时,我都认为有些事情会被破坏。

  3. P.S。我已经开始使用枚举字典方法,其中每个menuItem都与一个键配对。但这仍然不会强迫其他开发人员使用我的实现,也不是问题2的最优雅的解决方案

2 个答案:

答案 0 :(得分:9)

在WinForms设计器中给每个菜单项命名(我假设),然后用该名称引用它。

enter image description here

然后在代码中使用它:

menuExit.Visible = false;

如果以编程方式添加菜单项,请执行以下操作:

class MyForm : Form
{
    private MenuItem menuExit;

    ...

        myMenu.Items.Add(menuExit = new MenuItem(...));

    ...
}

然后仍以menuExit名称访问它。避免幻数和字符串的关键是直接引用你想要引用的内容。作为奖励,您现在可以使用F2安全地重命名此可修复程序。

答案 1 :(得分:0)

Romkyns的回答是这个版本的正确答案,但是如果您确实需要在代码中使用字符串文字,我会将它们保存在公共静态类中,例如:

public static class Constants
{
    public static class Menu 
    {
        public static readonly string FirstMenuName = "Menu 1";
        ...
    }

    public static class OtherCateogry
    {
        ...
    }
}

然后,您可以Constants.Menu.FirstMenuName访问它们。

至于最终阻止其他开发人员在整个代码中使用文字 - 你可能不得不求助于纠正之棒(坚固的金属尺);)。