swich....case Wenn zu viele bedingte Verzweigungen vorhanden sind, wird die Schönheit des Programms ernsthaft beeinträchtigt.
Zum Beispiel dieses
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.
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 Action<Message>
. Auf diese Weise stehen die Nachrichtenaufzählung und die der Nachrichtenaufzählung entsprechenden Verarbeitungsfunktionen in einer Eins-zu-Eins-Entsprechung.
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.
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!