【问题标题】:multiple conditions with if elseif else 的多个条件
【发布时间】:2021-12-28 14:02:45
【问题描述】:
var car = repository.Get(id);
if(car != null)
{
  if(car.AdditionalInfo != null)
  {
     if(car.AdditionalInfo.CarOwner.Status == "USA")
     {
        ...
     }
     else
     {
       .. do something for
     }
  }
  else
  {
     // create additional info and save
  }
}
else
{

}

考虑到以下情况以及多个 if 条件,是否有更简洁的方法来编写它? 不要关注 Status 属性,而是关注 if else 的流程。

【问题讨论】:

  • 改用switch

标签: c# .net


【解决方案1】:

您可以使用null conditional operator?.

if (car?.AdditionalInfo?.CarOwner?.Status == "USA")
{
...
}

如果car, 或AdditionalInfo, 或CarOwner 为空,那么左边的所有内容都将解析为null,否则您将获得状态,然后您可以进行比较。

【讨论】:

    【解决方案2】:

    您可以使用? 运算符:

    var car = repository.Get(id);
    if(car?.AdditionalInfo?.CarOwner?.Status == "USA" != null)
    {
      
    }
    else
    {
    
    }
    

    【讨论】:

    • 不需要!= null
    【解决方案3】:

    我认为最好通过反转ifs 并引入一个函数来减少嵌套。 当有多个条件时,空合并运算符会混淆可读性。我会选择类似的东西,因为在这里你一次只考虑一个条件:

    public void HandleCar()
        {
            var car = repository.Get(id);
            
            if (car is null)
                return;
    
            if (car.AdditionalInfo is null)
            {
                // create additional info and save
                return;
            }
    
            if (car.AdditionalInfo.CarOwner.Status == "USA")
            {
                // ...
                return;
            }
    
            // .. do something for
        }
       
    

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 2016-08-05
      • 1970-01-01
      • 2014-09-06
      • 2015-04-21
      • 2018-11-07
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多