c# - 使用 switch 语句改进我的助手的更好方法
问题描述
我有 html 助手,它从 List 中获取小部件对象,然后将其呈现为 html 代码:
@helper RenderWidgetByType(Widget widget)
{
@RenderWidgetHeader(widget.Header);
switch (widget.Type)
{
case "Table": @RenderGrid((Grid)widget); break;
case "Donut": @RenderDonut((Donut)widget);break;
}
}
我有这个课程:
public class Widget{}
public interface IWidget<T>{}
public class Grid : Widget{}
public class Grid<T> : Grid, IWidget<T>
public class Donut: Widget{}
public class Donut<T> : Donut, IWidget<T>
我所有的小部件都在列表小部件中,在 foreach 循环之后我使用每个小部件。
这段代码工作正常。但我相信,有更好的方法来做到这一点。我目前没有看到解决方案,有没有办法以某种方式改进我的代码?
解决方案
这是一天的结束,我想我会充实我的评论。这就是我所说的“模式匹配 switch 语句”的意思:
switch (widget)
{
case Donut donut: @RenderGrid(donut);
break;
case Grid grid: @RenderGrid(grid);
break;
//etc.
}
它比以前更干净了——但更容易阅读。
推荐阅读
- r - 将长列表转换为二进制数据帧
- angular - Angular 通用 Webpack 问题
- android - 通知内容不变
- python - 使用 pypdf2 合并 PDF 页面失败
- c - Winsock 发送函数无限期等待
- c++ - 访问已删除的对象不会导致崩溃
- regex - 调用函数以提取所有正则表达式匹配时出错“运行时错误'1004':应用程序定义或对象定义错误”
- go - 这个 goroutine 会永远泄漏/阻塞吗?
- javascript - 尝试使用 JS 和 Handlebars 添加用户并渲染新页面
- node.js - admin.auth(...).createSessionCookie 不是函数