C# 避免使用神奇的字符串和数字
我正在开发一个应用程序,在过去的几年里,该应用程序已经被不同的程序员编辑过,我偶然发现了一个使用字符串文本访问菜单项的问题 例如:在许多地方都有类似的代码C# 避免使用神奇的字符串和数字,c#,enums,menuitem,magic-numbers,C#,Enums,Menuitem,Magic Numbers,我正在开发一个应用程序,在过去的几年里,该应用程序已经被不同的程序员编辑过,我偶然发现了一个使用字符串文本访问菜单项的问题 例如:在许多地方都有类似的代码 mainMenu.MenuItems[1].MenuItems[0].Visible=true; 或 如何更改用于标识MenuItem并捕获其用于访问的所有位置的字符串?菜单和菜单项被声明为公共的,并在整个大型应用程序中使用 防止使用这些神奇索引的正确方法是什么。每次添加新项目或更改名称时,我都会看到东西被破坏 另外,我已经开始使用枚举字典
mainMenu.MenuItems[1].MenuItems[0].Visible=true;
或
另外,我已经开始使用枚举字典方法,其中每个menuItem都与一个键配对。但这仍然不会迫使其他开发人员使用我的实现,也不是问题2最优雅的解决方案。在WinForms designer中为每个菜单项指定一个名称(我假设),然后用该名称引用它 然后在代码中使用以下命令:
menuExit.Visible = false;
如果以编程方式添加菜单项,请执行以下操作:
class MyForm : Form
{
private MenuItem menuExit;
...
myMenu.Items.Add(menuExit = new MenuItem(...));
...
}
然后仍然通过
菜单exit
名称访问它。避免使用神奇数字和字符串的关键是,只需直接引用您想要引用的内容。作为奖励,您现在可以使用F2安全地重命名此VARABLE。Romkyns答案对于此场景是正确的,但是如果您确实需要在代码中使用字符串文字,我会将它们保存在公共静态类中,例如:
public static class Constants
{
public static class Menu
{
public static readonly string FirstMenuName = "Menu 1";
...
}
public static class OtherCateogry
{
...
}
}
然后,您可以通过Constants.Menu.FirstMenuName
访问它们
至于明确防止其他开发人员在整个代码中使用文字,您可能必须求助于校正棒(坚固的金属尺);) 您不能强迫其他开发人员不使用magic字符串,但您可以在开发人员会议上强调这种行为的负面影响,并使其在开发人员文档中突出显示,应该避免使用。有很多有效的方法可以将这一点传递给整个团队。您甚至可以尝试将其纳入公司开发人员指南中!抱歉,它们都是使用新菜单项(“字符串”)以编程方式添加的;谢谢,现在来看看所有使用字符串文字的地方怎么样?@johnhmm。。。在
菜单项上尝试“查找符号”
?(将光标放在菜单项上,然后按Shift+F12)。
public static class Constants
{
public static class Menu
{
public static readonly string FirstMenuName = "Menu 1";
...
}
public static class OtherCateogry
{
...
}
}