使这个代码片段更好
本文关键字:片段 更好 代码 | 更新日期: 2023-09-27 17:50:30
我有一个程序,它有以下代码:
foreach (string section in DataAccessLayer.AcceptedSections)
{
switch (section)
{
case "Section1":
Console.WriteLine("Section 1");
break;
case "Section2":
Console.WriteLine("Section 2");
break;
case "Section3":
Console.WriteLine("Section 3");
break;
default:
Console.WriteLine("Default section");
break;
}
}
无论如何,我可以做什么这段代码不提供节的字符串再次在情况下?数据访问层。AcceptedSections是动态的,我不想在我的代码中添加另一个section case,每次有新section出现时都要重新构建和重新部署。今天是星期五,我脑子不太好使。
例如: 当第4节添加到数据库中时,我不想添加以下代码:
case "Section4":
Console.WriteLine("Section 4");
break;
如果字符串总是"SectionN",您可以直接处理它:
if (section.StartsWith("Section"))
Console.WriteLine(section.Insert(7, " "));
else
Console.WriteLine("Default Section");
有一个由section
键控的Dictionary<string,Action<T>>
。这将完全取代switch语句。
调用相应的操作:
foreach (string section in DataAccessLayer.AcceptedSections)
{
myActionsDictionary[section]();
}
如果这都是数据驱动的,我建议你从数据库返回一些其他显示值以及标识符字符串
<<p>表strong> AcceptedSectionsName = "Section1"
DisplayName = "Section 1"
那么你可以直接返回DisplayName
如果不是,你必须像现在这样处理它,或者你可以创建一个带有display属性的enum:
public enum AcceptedSections
{
[Description("Default Section")]
Default,
[Description("Section 1")]
Section1,
[Description("Section 2")]
Section2,
[Description("Section 3")]
Section3,
[Description("Section 4")]
Section4
}
// writing this made me kind woozy... what a terrible enum
允许你这样写:
foreach (AcceptedSections section in AcceptedSections.GetValues())
{
Console.WriteLine(section.GetDescription());
}
其中GetDescription()
是一个简单的方法,返回enum