避免魔术字符串和数字

jth*_*h41 3 c# enums magic-numbers menuitem

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

例如:在很多地方都有类似的代码

mainMenu.MenuItems[1].MenuItems[0].Visible=true;
Run Code Online (Sandbox Code Playgroud)

要么

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

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

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

Rom*_*kov 9

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

在此输入图像描述

然后在你的代码中使用它:

menuExit.Visible = false;
Run Code Online (Sandbox Code Playgroud)

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

class MyForm : Form
{
    private MenuItem menuExit;

    ...

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

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