使用 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.
 }

它比以往任何时候都更简洁 - 但更易于阅读。