2011-06-16 89 views
0

請找到以下代碼,並幫助我編寫更好的if...else代碼。我覺得這是一個非常低於平均水平的方式來寫其他如果。需要幫助來重構嵌套的if else語句

{ 
     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; 
    } 

由於 ķ

+0

是什麼結果呢?這甚至編譯? – goalie7960 2011-06-16 15:37:09

+0

理想情況下,如果可以的話,你應該把它分成單獨的方法。而你錯過了;關閉第一個郵政編碼= adress.zipcode – w69rdy 2011-06-16 15:38:34

回答

4

重構方法爲更小的單位作爲適合的。另外,儘早從方法返回而不是使用else子句。

E.g.而不是

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; 
} 

務必:

if (adress == null) 
{ 
    return false; 
} 

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

有不少其他的問題,但應該讓代碼更清潔開始。

+0

即使這與單一的回報原則,可能是一個很好的折衷與真正巨大的嵌套塊 – sll 2015-03-03 15:04:53

3

我不認爲有人會「幫助」你重寫這段代碼。不過,我可以提供一些建議。

我已經發現,如果我試圖重寫和向後工作(鏈上),我會更容易追蹤到最內層。根據IF塊,有時候在適當的時候將它們分解成單獨的方法更容易。

另外,不要忘記條件運算符。有時可以更清楚地使用它,而不是整個if else塊。

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

這裏是MSDN的鏈接就可以了:conditonal operator documentation