使这个代码片段变得更好
我有一个包含以下代码的程序:
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;
}
}
我是否可以执行此代码的操作,而无需在案例中再次提供该部分的字符串? DataAccessLayer.AcceptedSections 是动态的,我不想必须在我的代码中添加另一个部分案例,每次有新部分出现时重建和重新部署。今天是星期五,我的思维不太好。
例如: 当第 4 节添加到数据库时,我不想添加以下代码:
case "Section4":
Console.WriteLine("Section 4");
break;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果字符串始终是“SectionN”,您可以直接处理它:
If the string is always "SectionN", you could just handle it directly:
有一个由
section
键控的Dictionary>
。这将完全取代 switch 语句。调用相应的动作:
Have a
Dictionary<string,Action<T>>
that is keyed bysection
. This will completely replace the switch statement.Invoke the corresponding action:
如果这都是数据驱动的,我建议您从数据库中返回一些其他显示值以及标识符字符串
Table AcceptedSections
然后您可以只返回
DisplayName
如果它是不是您必须像现在一样处理这个问题,或者您可以创建一个带有用于显示的属性的枚举:
这将允许您编写如下内容:
其中
GetDescription()
是返回枚举上的自定义属性的简单方法If this is all data-driven I suggest you just return some other display value from the database along with that identifier string
Table AcceptedSections
Then you can just just return the
DisplayName
If it is not you'll have to handle this like you're doing now or you could create an enum with an attribute for display:
which will allow you to write something like this:
where
GetDescription()
is a simple method that returns that custom attribute on the enum