2016-06-03 4 views
1

수없는 점프 문 실행 : 아래 코드에서 고토 문에중복 제어 흐름 점프 문 여기에 몇 가지를 이해하기

  1. , 내가 이중화 제어 흐름 점프 문을 말하는 컴파일러 팁을 얻고있다. 무슨 뜻이에요?

  2. 내가 이해할 수없는 이유는 무엇입니까? 출력에서 ​​마침내 lbl 텍스트 앞에 오는 이유는 무엇입니까?

고마워요.

class Program 
     { 
     static void Main(string[] args) 
     { 
      try 
      { 
       Nullable<int> i = null; 
       //i = 5; 
       Console.WriteLine("i:" + i.HasValue); 
       Console.WriteLine("i:" + i.Value); 
      } 
      catch (System.InvalidOperationException e) 
      { 

      Console.WriteLine("Exception:" + e); 
      goto lbl; // A 

      } 
      finally 
      { 
      Console.WriteLine("finally"); 
      } 
      lbl: 
      Console.WriteLine("hi lbl"); 
     } 
     } 

답변

5

는 몇 가지 방법이 finally 블록을 피할 수 있습니다

  1. 그러나, 일반적인 코드는 finally 블록 건너 뛸 수없는 컴퓨터

죽여 과정

  • 처치하십시오.

    이와 같이 불필요한 제어 흐름 문은 기본적으로 goto lbl 문을 제거하면 제어 흐름이 동일하게 진행됩니다. 항상 finally 블록을 실행하고 을 입력 한 다음 라벨을 이동합니다. finally 블록 다음에 코드가 없기 때문에 앞에 레이블이있는 경우 goto이없는 정상적인 제어 흐름은 어쨌든이 방식으로 진행됩니다.

  • +0

    감사합니다. 나는 당신의 대답이 매우 유용하고 만족 스럽다는 것을 발견했습니다. –