swich....case 조건 분기가 너무 많으면 프로그램의 아름다움이 심각하게 훼손됩니다.
예를 들어 이건
위 코드는 두 프로세스 간의 통신에 사용됩니다. 통신을 위한 열거가 많기 때문에 케이스 분기도 많습니다. 결과적으로 코드의 가독성과 유지 관리성이 심각하게 저하됩니다. 정보를 검색하고 재구성한 후 키-값 쌍을 사용하여 이 상황에서 케이스를 전환할 수 있는 실행 가능한 대안을 생각해 냈습니다.
프로세스 통신의 코드 로직을 위해 다음과 같은 키-값 쌍이 구성됩니다.
Dictionary<EnumMsg, Action<Message>> mMessageReceiver = new Dictionary<EnumMsg, Action<Message>>();
이 키-값 쌍의 키는 사용자 정의 메시지 열거형이고 값은 Action58613a913f649e803df57c76e6a932e4
의 대리자입니다. 이러한 방식으로, 메시지 열거와 메시지 열거에 대응하는 처리 기능은 일대일 대응을 이룬다.
초기화 중에 열거형과 해당 작업을 로드합니다.
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); }
이렇게 하면 키-값 쌍 개체의 구성이 완료됩니다. 그런 다음 swith...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); } } }
키 기반 검색 키-값 쌍, 새로운 케이스 브랜치를 추가해야 할 때 원래 방법은 스위치를 변경해야 합니다....케이스 브랜치를 변경해야 하지만 키-값 쌍 방법을 사용하면 새로운 처리 방법을 작성하고 키-값 쌍에 새 값을 추가하세요. 코드는 간결하고 아름답습니다. 지루한 사례의 긴 목록이 없습니다.
위 내용은 키-값 쌍을 사용하여 Switch...Case 문을 바꾸는 방법에 대한 C# 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!