2013-02-01 71 views
0

項目有這樣的代碼:刪除臨時變量

Cookie CookieCreate(CookiesTypes type) 
{ 
    Cookie user_cookie = null; 

    switch (type) 
    { 
      case CookiesTypes.SessionId: 
        user_cookie = new Cookie("session_id", Convert.ToBase64String(Guid.NewGuid().ToByteArray())); 
        break; 
      case CookiesTypes.ClientIp: 
        HttpListenerContext context = listener.GetContext(); 
        user_cookie = new Cookie("client_ip", context.Request.RemoteEndPoint.ToString()); 
        break; 
    } 

    return user_cookie; 
} 

我瞭解,該臨時變量user_cookie是語法錯誤......我已經試過在開關塊使用return兩個在兩種情況下,但我有一個編譯器錯誤回報,當我試圖這樣:

僞代碼:

case ... : 
    //some action 
    return var; 
+0

爲什麼你認爲使用本地範圍變量是一個糟糕的語法?它使代碼更清晰,代碼流完整。 –

回答

1

具有被在的情況下,設置臨時語句最後返回的語法並不錯,如果您需要在返回它之前在所有情況下對user_cookie執行某些操作,它也是唯一的選擇。

唯一的問題是看在你的代碼是缺乏default箱子這的確是有用的,因爲:

  • 要麼你可以要求default情況下(讓你在這種情況下做一些事情)
  • 無論是開關應永遠不會達到一個default情況下,(所以你應該拋出一個異常管理這種情況在一個特殊的方式,例如)

如果盲目刪除臨時變量並返回VA直接像你試圖做的那樣,那麼它會給你一個編譯器錯誤,可能是因爲並不是所有的分支都會返回一些東西(因爲在switch之後缺少default子句或者缺少return)。

1

儘管與臨時變量沒有任何固有的錯誤,如果你真的想避免它,你只需要確保所有的代碼路徑返回的東西。

這意味着(舉例來說)改變當前的return到:

return null; 

,並具有兩種情況包括:

return new Cookie (whatever); 

,而不是分配。