>  기사  >  백엔드 개발  >  키-값 쌍을 사용하여 Switch...Case 문을 바꾸는 방법에 대한 C# 예

키-값 쌍을 사용하여 Switch...Case 문을 바꾸는 방법에 대한 C# 예

黄舟
黄舟원래의
2017-09-07 13:56:153405검색

swich....case 조건 분기가 너무 많으면 프로그램의 아름다움이 심각하게 훼손됩니다.
예를 들어 이건
키-값 쌍을 사용하여 Switch...Case 문을 바꾸는 방법에 대한 C# 예

위 코드는 두 프로세스 간의 통신에 사용됩니다. 통신을 위한 열거가 많기 때문에 케이스 분기도 많습니다. 결과적으로 코드의 가독성과 유지 관리성이 심각하게 저하됩니다. 정보를 검색하고 재구성한 후 키-값 쌍을 사용하여 이 상황에서 케이스를 전환할 수 있는 실행 가능한 대안을 생각해 냈습니다.

키-값 쌍 객체 선언

프로세스 통신의 코드 로직을 위해 다음과 같은 키-값 쌍이 구성됩니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.