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

我明白,那个 temp 变量user_cookie的语法不好......我return在两种情况下都尝试在 switch-block 中使用,但是当我尝试这样做时,我遇到了编译器错误:

伪代码:

case ... :
     //some action
    return var;
4

2 回答 2

1

Despite the fact that there's nothing inherently wrong with temporary variables, if you really want to avoid it you just need to ensure that all code paths return something.

That means (for example) changing your current return to:

return null;

and having both cases contain:

return new Cookie (whatever);

instead of the assignment.

于 2013-02-01T22:21:38.933 回答
1

在最后返回的语句的情况下设置一个临时值并不是一个糟糕的语法,如果您需要在返回之前为所有情况switch做一些事情,它也是唯一的选择。user_cookie

在您的代码中看到的唯一问题是缺少一个default确实有用的案例,因为:

  • 要么你可以要求一个default案例(以便你在那种情况下做某事)
  • 要么开关永远不应该到达一个default案例(所以你应该以一种特殊的方式来管理这种情况,例如通过抛出一个异常)

如果你盲目地删除临时变量并像你试图做的那样直接返回值,那么它会给你一个编译器错误,可能是因为不是所有的分支都返回一些东西(因为你缺少一个default子句或return在 switch 之后缺少一个)。

于 2013-02-01T22:19:38.763 回答