我有一个方法,其中包含大量 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/