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_cookietemp 変数が悪い構文であることは理解しています... returnswitch-block で 2 つのケースの両方で使用しようとしましたが、試したときにコンパイラ エラーが発生しました。

擬似コード:

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

2 に答える 2

1

一時変数に本質的に問題はないという事実にもかかわらず、本当にそれを回避したい場合は、すべてのコード パスが何かを返すことを確認する必要があります。

つまり、(たとえば)現在returnを次のように変更することを意味します。

return null;

両方のケースに次のものが含まれています。

return new Cookie (whatever);

割り当ての代わりに。

于 2013-02-01T22:21:38.933 に答える
1

最後に返されるステートメントのケースに設定された一時的なものを持つことは、悪い構文ではありません。それを返す前にすべてのケースに対してswitch何かをする必要がある場合にも、これが唯一の選択肢です。user_cookie

コードに見られる唯一の問題は、次の理由でdefault実際に役立つケースがないことです。

  • ケースを要求することもできますdefault(その状況で何かを行うため)
  • スイッチがdefaultケースに到達することはありません (そのため、例外をスローするなど、特別な方法でその状況を管理する必要があります)。

やみくもに一時変数を削除して、やろうとしているように値を直接返すと、おそらくすべてのブランチが何かを返すわけではないため、コンパイラ エラーが発生します (default句がないかreturn、スイッチの後に a がないため)。

于 2013-02-01T22:19:38.763 に答える