c# - 围绕执行相同检查的多个 if 语句的代码重构 C# 问题

标签 c# .net asp.net-mvc refactoring

我有一个方法,其中包含大量 if 语句,尽管我不确定如何改进代码,但看起来有点愚蠢。

这是一个例子。这个逻辑位于 View 内部,现在位于 Controller 中,这要好得多,但我是否缺少一些东西,也许是一种设计模式阻止我必须检查 panelCount < NumberOfPanelsToShow 并处理 panelCount 每个条件?也许不是,只是觉得丑!

非常感谢

if (model.Train && panelCount < NumberOfPanelsToShow)
{
    panelTypeList.Add(TheType.Train);
    panelCount++;
}
if (model.Car && panelCount < NumberOfPanelsToShow)
{
    panelTypeList.Add(TheType.Car);
    panelCount++;
}
if (model.Hotel && panelCount < NumberOfPanelsToShow)
{
    panelTypeList.Add(TheType.Hotel);
    panelCount++;
}
...

最佳答案

假设 Model.Train、Model.Car、Model.Plane 只是“模型”类型的 bool 指示符(而不是创建 Train : Model、Plane : Model 等)

public enum ModelType { Train, Car, Plane };

public class Model { 
    ... 
    public ModelType {get;set;}
    ... 
}

在您的测试中:

if(panelCount < NumberOfPanelsToShow)
switch (Model.ModelType)
{
    case ModelType.Train :
        ...
        break;

    case ModelType.Plane :
...
}

但是,由于汽车、飞机和火车不同,您确实应该有一个基本类型模型,从模型派生汽车、飞机和火车,然后您可以重载方法来处理每种类型

if (panelCount < NumberOfPanelsToShow)
{
    panelCount += AddModel(model);
}

private int AddModel(Plane model)
{ // do plane stuff here and on success return 1 else 0; }

private int AddModel(Train model)
{ // do train stuff here and on success return 1 else 0; }

private int AddModel(Car model)
{ // do car stuff here and on success return 1 else 0; }

关于c# - 围绕执行相同检查的多个 if 语句的代码重构 C# 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492496/

相关文章:

html - <table> 样式元素未显示

c# - 是否可以在服务器 (IIS) 上设置内容过期以强制下载新的脚本文件版本?

c# - 只能通过for循环迭代显示数组

c# - 在 ASP.NET Core 2 和 Entity Framework Core 2 中查询表中的附近位置

c# - 哪个 LINQ 语句对于使用 Entity Framework 搜索记录有效

c# - 匿名方法源码

c# - WCF 客户,持有引用与否?

javascript - AngularJs 不渲染值

c# - PostAsJsonAsync 似乎没有发布正文参数

c# - 使用 LINQ 表达式获取多个嵌套字典除外