Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Beispiel für die Verwendung von Schlüssel-Wert-Paaren zum Ersetzen der Switch...Case-Anweisung

C#-Beispiel für die Verwendung von Schlüssel-Wert-Paaren zum Ersetzen der Switch...Case-Anweisung

黄舟
黄舟Original
2017-09-07 13:56:153405Durchsuche

swich....case Wenn zu viele bedingte Verzweigungen vorhanden sind, wird die Schönheit des Programms ernsthaft beeinträchtigt.
Zum Beispiel dieses
C#-Beispiel für die Verwendung von Schlüssel-Wert-Paaren zum Ersetzen der Switch...Case-Anweisung

Der obige Code wird für die Kommunikation zwischen zwei Prozessen verwendet. Da es viele Aufzählungen für die Kommunikation gibt, gibt es viele Fallzweige. Dadurch werden die Lesbarkeit und Wartbarkeit des Codes erheblich beeinträchtigt. Nachdem ich nach Informationen gesucht und rekonstruiert hatte, kam ich auf eine praktikable Alternative, um in dieser Situation den Fall zu wechseln – mithilfe von Schlüssel-Wert-Paaren.

Schlüssel-Wert-Paarobjekte deklarieren

Für die Codelogik der Prozesskommunikation werden die folgenden Schlüssel-Wert-Paare erstellt.

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

Der Schlüssel dieses Schlüssel-Wert-Paares ist eine benutzerdefinierte Nachrichtenaufzählung, und der Wert ist der Delegate von Action58613a913f649e803df57c76e6a932e4. Auf diese Weise stehen die Nachrichtenaufzählung und die der Nachrichtenaufzählung entsprechenden Verarbeitungsfunktionen in einer Eins-zu-Eins-Entsprechung.

Meldung während der Initialisierung registrieren

Laden Sie während der Initialisierung die Aufzählung und die entsprechende Aktion.

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

Damit ist die Konstruktion des Schlüssel-Wert-Paar-Objekts abgeschlossen. Anschließend können Sie das Codesegment „swith...case“ umgestalten.

Ändern Sie das Schalter-...Fallcode-Segment

Der Schalter-...Fallcode vor der Rekonstruktion

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

Suchen Sie die entsprechende Verarbeitungsmethode basierend auf dem Schlüsselwert Paare Der Code

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

sucht basierend auf dem Schlüssel des Schlüssel-Wert-Paares. Wenn ein neuer Case-Zweig hinzugefügt werden muss, muss bei der ursprünglichen Methode der Schalter geändert werden....Case-Zweig, aber mit Bei der Schlüssel-Wert-Paar-Methode müssen Sie lediglich eine neue Verarbeitungsmethode schreiben und dem Schlüssel-Wert-Paar ein neues Schlüssel-Wert-Paar hinzufügen. Der Code ist prägnant und schön, ohne eine lange Liste langweiliger Fälle.

Das obige ist der detaillierte Inhalt vonC#-Beispiel für die Verwendung von Schlüssel-Wert-Paaren zum Ersetzen der Switch...Case-Anweisung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn