【问题标题】:Clean Code for If StatementIf 语句的干净代码
【发布时间】:2017-08-08 07:53:14
【问题描述】:

我有这样的陈述,我该如何优化这个逻辑。我想大约 1 小时,但我没有找到。

我怎样才能简化这个逻辑?

if (model.WaitingChecked) 
{
    if (model.selectedStatus != 0) 
    {
        model.DataList = data.Where(x => x.status != 6 && x.status == model.selectedStatus);
        return View(model);
    }

    model.DataList = data.Where(x => x.status != 6);
    return View(model);
}

if (model.SelectedStatus != 0) 
{
    model.DataList = data.Cast<DataDetailedList>().Where(x => x.status == model.selectedStatus);
    return View(model);
}

【问题讨论】:

  • model.WaitingChecked 有什么作用?
  • 我看不到任何真正简化这里的方法,除非你能以某种方式组合条件。 Scala 专家可能有更多话要说。
  • 我的意思是我必须使用 3 次返回视图(模型)。好像没有优化。 @Pirate 它是视图上的一个复选框。
  • 它看起来更像是命令式 Java(!!;return
  • @cchantep 我会说,C#

标签: scala if-statement logic


【解决方案1】:

您可以在不同的条件下使用模式匹配。请记住,尽管模式匹配需要详尽无遗。这意味着需要定义值的每个组合。

(model.WaitingChecked, model.selectedStatus ) match{
  case (true, 0) =>
    model.DataList = data.Where(x => x.status != 6)
    View(model)
  case (true, _) =>
    model.DataList = data.Where(x => x.status != 6 && x.status == model.selectedStatus)
    View(model)
  case (_, 0) =>
    //missing logic for model.selectedStatus is zero return
  case (_, _) =>
    model.DataList = data.Cast<DataDetailedList>().Where(x => x.status == model.selectedStatus)
    View(model)
}

【讨论】:

  • model.selectedStatus 成为 ADT 也很有意义——因此编译器将检查是否详尽。
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2012-11-27
  • 2017-08-19
  • 1970-01-01
  • 2017-10-04
相关资源
最近更新 更多