Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用switch语句改进助手的更好方法_C#_Asp.net Mvc_Switch Statement_Helper - Fatal编程技术网

C# 使用switch语句改进助手的更好方法

C# 使用switch语句改进助手的更好方法,c#,asp.net-mvc,switch-statement,helper,C#,Asp.net Mvc,Switch Statement,Helper,我有一个html助手,它从列表中获取小部件对象,然后将其呈现为html代码: @helper RenderWidgetByType(Widget widget) { @RenderWidgetHeader(widget.Header); switch (widget.Type) { case "Table": @RenderGrid((Grid)widget); break; case "Donut": @RenderDonut((Do

我有一个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循环中,我处理每个小部件


这段代码运行良好。但我相信,有更好的方法可以做到这一点。我目前还没有找到解决方案,有没有办法改进我的代码

今天结束了,我想我应该充实一下我的评论。这就是我所说的模式匹配开关语句:


它非常简洁,但更易于阅读。

看一看模式匹配开关语句:。这将使您的代码稍微好一点-不再有类型字符串。
 switch (widget)
 {
     case Donut donut: @RenderGrid(donut);
         break;
     case Grid grid: @RenderGrid(grid);
         break;
     //etc.
 }