使用 switch 语句改进我的助手的更好方法
Better way to improve my helper with switch statement
我有 html 助手,它从列表中获取小部件对象,然后将其呈现为 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 循环之后我使用每个小部件。
这段代码工作正常。但我相信,有更好的方法可以做到这一点。我目前没有看到解决方案,有什么办法可以改进我的代码吗?
今天结束了,我想我应该充实我的评论。这就是我所说的 "pattern matching switch statement":
switch (widget)
{
case Donut donut: @RenderGrid(donut);
break;
case Grid grid: @RenderGrid(grid);
break;
//etc.
}
它比以往任何时候都更简洁 - 但更易于阅读。
我有 html 助手,它从列表中获取小部件对象,然后将其呈现为 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 循环之后我使用每个小部件。
这段代码工作正常。但我相信,有更好的方法可以做到这一点。我目前没有看到解决方案,有什么办法可以改进我的代码吗?
今天结束了,我想我应该充实我的评论。这就是我所说的 "pattern matching switch statement":
switch (widget)
{
case Donut donut: @RenderGrid(donut);
break;
case Grid grid: @RenderGrid(grid);
break;
//etc.
}
它比以往任何时候都更简洁 - 但更易于阅读。