ホームページ  >  記事  >  バックエンド開発  >  キーと値のペアを使用して Switch...Case ステートメントを置き換える方法の C# 例

キーと値のペアを使用して Switch...Case ステートメントを置き換える方法の C# 例

黄舟
黄舟オリジナル
2017-09-07 13:56:153427ブラウズ

swich....case 条件分岐が多すぎると、プログラムの美観が著しく損なわれます。
例えばこれ
キーと値のペアを使用して Switch...Case ステートメントを置き換える方法の C# 例

上記のコードは2つのプロセス間の通信に使用されており、通信には多くの列挙が存在するため、多くの場合の分岐があります。その結果、コードの可読性と保守性が大幅に低下します。情報を検索して再構築した結果、この状況でケースを切り替えるための実行可能な代替手段、つまりキーと値のペアを使用する方法を思いつきました。

キーと値のペアのオブジェクトを宣言する

プロセス通信のコード ロジックでは、次のキーと値のペアが構築されます。

Dictionary<EnumMsg, Action<Message>> mMessageReceiver = new Dictionary<EnumMsg, Action<Message>>();

このキーと値のペアのキーはカスタム メッセージ列挙で、値は Action58613a913f649e803df57c76e6a932e4 のデリゲートです。このように、メッセージ列挙と、メッセージ列挙に対応する処理関数とは、1対1に対応することになる。

初期化中にメッセージを登録する

初期化中に、列挙と対応するアクションを読み込みます。

private void SubscribeMessageReceiver()
{
    mMessageReceiver.Add(EnumMsg.SEND_PANO_PARAM, UpdatePano);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_VIEW, ExecutePanoViewCommand);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_LENGTH_MEASURE, ExecuteLengthMeasure);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_AREA_MEASURE, ExecuteAreaMeasure);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_QUICK_PICK, ExecuteQickPickCommand);
}

これで、キーと値のペア オブジェクトの構築が完了しました。次に、switch...case コード セグメントをリファクタリングできます。

スイッチ…ケースコードセグメントを変更

スイッチ…再構成前のケースコード

  protected override void DefWndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case ((int)API.WM_COPYDATA):
                    {
                        switch ((int)m.WParam)
                        {
                            case ((int)Procedure.OpenSkyline):
                                   m = OpenSkylineView(m);
                                break;
                            case ((int)Procedure.Measureare):
                                 m = Measure(m);
                                break;
                            case ((int)Procedure.Measurelength):
                                 m = Measure(m);
                                break;
                        }
                    }
                    break;
                default:
                    break;
            }
            base.DefWndProc(ref m);
        }

キーと値のペアに基づいて、対応する処理メソッドのコードを検索

        protected override void DefWndProc(ref Message m)
        {
            base.DefWndProc(ref m);
            if (m.Msg == (int)API.WM_COPYDATA)
            {
                EnumPanoMsg pEnumPanoMsg = (EnumPanoMsg)m.WParam;
                if (mMessageReceiver.Keys.Contains(pEnumPanoMsg))
                {
                    mMessageReceiver[pEnumPanoMsg](m);
                }
            }
        }

キーに基づいて検索キーと値のペア、新しい case ブランチを追加する必要がある場合、元のメソッドでは switch....case ブランチを変更する必要がありますが、キーと値のペアのメソッドを使用すると、新しい処理メソッドを記述するだけで済みます。キーと値のペアに新しいものを追加するだけです。コードは簡潔で美しく、退屈なケースの長いリストはありません。

以上がキーと値のペアを使用して Switch...Case ステートメントを置き換える方法の C# 例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。