2013-02-01 75 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); 

,而不是分配。