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

黄舟
Freigeben: 2017-09-07 13:56:15
Original
3398 Leute haben es durchsucht

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>>();
Nach dem Login kopieren

Der Schlüssel dieses Schlüssel-Wert-Paares ist eine benutzerdefinierte Nachrichtenaufzählung, und der Wert ist der Delegate von Action<Message>. 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);
}
Nach dem Login kopieren

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);
        }
Nach dem Login kopieren

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);
                }
            }
        }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!