需要帮助重构嵌套的if-else语句

本文关键字:if-else 语句 嵌套 重构 帮助 | 更新日期: 2023-09-27 17:59:31

请找到以下代码并帮助我编写更好的if...else代码。我觉得这是一种非常低于平均水平的写其他if的方式。

   {
        Retrieve the number in focus.
        string number= getnumber();
        string zipcode;
        int corporate;
        bool bCoverageInBet = false;
        try
        {
            //Get the address and zipcode of the number
            GetAddress(number, out address);
            if (adress!= null)
            {
                zipcode = adress.zipcode
                //if the following are null means this is first time call
                if (!(string.IsNullOrEmpty(_loadedZipcode)) && _address != null)
                {
                    if (zipcode.Equals(_loadedZipcode))
                    {
                        if (adress.Equals(_address ))
                        {
                            if (focusChanged)
                            {
                                return result;
                            }
                        }
                        else
                        {
                            if (bCoverageInBet)
                            {
                                // case 2: Different address and different coverage which is in between, make a call anf get new valus for result                                    
                                //return the new result
                            }
                            else
                            {
                                return //current result value;
                            }
                        }
                    }   
                }             
                else 
                    {
                        _loadedZipcode = zipcode;
                        _address = adress;
                        GetResponse( out resp)
                        {
                            if ((resp != null))
                            {
                                bool isCorporate = false;
                                corporate = getValues();
                                if (corporate .Equals(100))
                                {
                                   result = true;
                                   return result;
                                }
                                else if (corporate > 0 && corporate < 100)
                                {
                                    //Make a call to get corporate 
                                    bCoverageInBet = true;
                                    LocationResponse objResults;
                                    if (GetAddressbycorporate(out objResults, out errMsg))
                                    {
                                        if (objResults != null)
                                        {
                                            isCorporate = objResults.located;
                                            if (isCorporate )
                                            {
                                                result = true;
                                            }
                                        }
                                    }
                                }
                                return result;
                            }
                            return result;
                        }
                        else
                        {
                            DisplayError("No response ");
                            return result;
                        }
                    }
                }
            else
            {
               //To do: What is address comes null
            }
        }
        catch (System.Exception ex)
        {
            //some ccode
        }
        return result;
   }

谢谢K

需要帮助重构嵌套的if-else语句

根据需要将方法重新划分为更小的单元。此外,从方法中提前返回,而不是使用else子句。

例如,代替

 if (adress!= null)
 {
    zipcode = adress.zipcode
    //if the following are null means this is first time call
    if (!(string.IsNullOrEmpty(_loadedZipcode)) && _address != null)
    {
    }
    else
    {
      return false;
    }
 }
 else
 {
   return false;
 }

Do:

 if (adress == null)
 {
   return false;
 }
 if (string.IsNullOrEmpty(_loadedZipcode) || _address == null)
 {
   return false;
 }

还有很多其他问题,但这应该会使代码从一开始就更干净。

我认为没有人会"帮助"你重写这段代码。不过,我可以提出一些建议。

我发现更容易追溯到内心深处,并尝试重写和逆向工作(向上)。根据IF块的不同,有时在适当的情况下更容易将它们分解为单独的方法。

另外,不要忘记条件运算符。有时使用它比使用一个完整的if-else块更清楚。

例如,property = (boolean expression) ? (true value) : (false value);

下面是MSDN的链接:条件运算符文档