2012-04-16 4 views
0

ILSpy 및 .NET Reflector를 사용하여 코드를 볼 수 있습니다. 코드를 이해할 수 없으므로 웹에서 검색하고 any1이 문제를 해결하는 방법을 찾지 못했습니다. ILSpy이 코드C# 컴파일러 ILSpy on WP7

private void Item_Clicked(object sender, EventArgs e) 
    { 
     switch (0) 
     { 
     case 0: 
      { 
       IL_0E: 
       FileSystemItem fileSystemItem; 
       while (true) 
       { 
        fileSystemItem = (sender as FileSystemItem); 
        int num = 1; 
        while (true) 
        { 
         switch (num) 
         { 
         case 0: 
          if (<PrivateImplementationDetails>{4E2292E7-C82C-431F-9529-B0045F4C1457}.$$method0x60003e4-1 != null) 
          { 
           goto IL_25F; 
          } 
          if (true) 
          { 
           IL_163: 
           num = 3; 
           continue; 
          } 
          goto IL_163; 

         case 1: 
          if (fileSystemItem != null) 
          { 
           num = 11; 
           continue; 
          } 
          return; 

         case 2: 
          goto IL_3B8; 

         case 3: 
          { 
           Dictionary<string, int> expr_1B9 = new Dictionary<string, int>(9); 
           expr_1B9.Add(".mp3", 0); 
           expr_1B9.Add(".wav", 1); 
           expr_1B9.Add(".wma", 2); 
           expr_1B9.Add(".wmv", 3); 
           expr_1B9.Add(".avi", 4); 
           expr_1B9.Add(".jpg", 5); 
           expr_1B9.Add(".png", 6); 
           expr_1B9.Add(".txt", 7); 
           expr_1B9.Add(".inf", 8); 
           <PrivateImplementationDetails>{4E2292E7-C82C-431F-9529-B0045F4C1457}.$$method0x60003e4-1 = expr_1B9; 
           num = 15; 
           continue; 
          } 

         case 4: 
          { 
           string ext; 
           if ((ext = fileSystemItem.Ext) != null) 
           { 
            num = 8; 
            continue; 
           } 
           return; 
          } 

         case 5: 
          goto IL_2C9; 

         case 6: 
          num = 12; 
          continue; 

         case 7: 
          { 
           string ext; 
           int num2; 
           if (<PrivateImplementationDetails>{4E2292E7-C82C-431F-9529-B0045F4C1457}.$$method0x60003e4-1.TryGetValue(ext, ref num2)) 
           { 
            num = 6; 
            continue; 
           } 
           return; 
          } 

         case 8: 
          num = 0; 
          continue; 

         case 9: 
          goto IL_25A; 

         case 10: 
          goto IL_36A; 

         case 11: 
          num = 14; 
          continue; 

         case 12: 
          { 
           int num2; 
           switch (num2) 
           { 
           case 0: 
           case 1: 
           case 2: 
            num = 16; 
            continue; 

           case 3: 
           case 4: 
            goto IL_171; 

           case 5: 
           case 6: 
            goto IL_1A4; 

           case 7: 
           case 8: 
            this.ShowText(fileSystemItem.Path); 
            num = 9; 
            continue; 

           default: 
            num = 13; 
            continue; 
           } 
           break; 
          } 

         case 13: 
          return; 

         case 14: 
          if (fileSystemItem.IsFolder) 
          { 
           switch ((1 == 1) ? 1 : 0) 
           { 
           case 0: 
           case 2: 
            goto IL_36F; 

           case 1: 
            IL_2B7: 
            if (false) 
            { 
             IL_2BD: 
             num = 5; 
             continue; 
            } 
            goto IL_2BD; 
           } 
           goto IL_2B7; 
          } 
          num = 4; 
          continue; 

         case 15: 
          goto IL_25F; 

         case 16: 
          if (fileSystemItem.IsPlaying) 
          { 
           num = 10; 
           continue; 
          } 
          goto IL_36F; 
         } 
         break; 
         IL_25F: 
         num = 7; 
         continue; 
         IL_36F: 
         BackgroundAudioPlayer.get_Instance().set_Track(new AudioTrack(new Uri(fileSystemItem.Path, 2), "Unknown", "Unknown", "Unknown", null)); 
         IEnumerator<object> enumerator = this.filesListBox.get_Items().GetEnumerator(); 
         num = 2; 
        } 
       } 
       IL_131: 
       BackgroundAudioPlayer.get_Instance().Stop(); 
       fileSystemItem.IsPlaying = false; 
       return; 
       IL_171: 
       MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher(); 
       mediaPlayerLauncher.set_Media(new Uri(fileSystemItem.Path, 2)); 
       mediaPlayerLauncher.set_Location(2); 
       mediaPlayerLauncher.Show(); 
       return; 
       IL_1A4: 
       this.ShowImage(fileSystemItem.Path); 
       return; 
       IL_25A: 
       return; 
       IL_2C9: 
       this.ShowFolderContents(fileSystemItem.Path); 
       return; 
       IL_36A: 
       goto IL_131; 
       IL_3B8: 
       try 
       { 
        int num = 2; 
        while (true) 
        { 
         switch (num) 
         { 
         case 0: 
          num = 1; 
          continue; 

         case 1: 
          goto IL_EC; 

         case 3: 
          { 
           IEnumerator<object> enumerator; 
           if (!enumerator.MoveNext()) 
           { 
            num = 0; 
            continue; 
           } 
           FileSystemItem fileSystemItem2 = (FileSystemItem)enumerator.get_Current(); 
           fileSystemItem2.IsPlaying = false; 
           num = 4; 
           continue; 
          } 
         } 
         IL_A7: 
         num = 3; 
         continue; 
         goto IL_A7; 
        } 
        IL_EC: 
        goto IL_23A; 
       } 
       finally 
       { 
        int num = 2; 
        while (true) 
        { 
         IEnumerator<object> enumerator; 
         switch (num) 
         { 
         case 0: 
          goto IL_12E; 

         case 1: 
          enumerator.Dispose(); 
          num = 0; 
          continue; 
         } 
         if (enumerator == null) 
         { 
          break; 
         } 
         num = 1; 
        } 
        IL_12E:; 
       } 
       goto IL_131; 
       IL_23A: 
       fileSystemItem.IsPlaying = true; 
       return; 
      } 
     } 
     goto IL_0E; 
    } 

이의 오류가 나에게이 오류 그래서

<PrivateImplementationDetails>{4E2292E7-C82C-431F-9529-B0045F4C1457}.$$method0x60003e4-1 

이 무엇을 보여 사전도 (.NET 리플렉터는 동일하게 표시) ? 어떻게 해결할 수 있습니까? 다른 변수로 대체해야합니까?

+2

반사 코드를 디버깅하는 이유는 무엇입니까? 코드를 작성하지 않은 경우가 아니면 소스 코드를 디버그하지 않으면 코드를 작성하지 않은 이유는 무엇입니까? 당신의 실제 문제는 무엇이고 그것에 대해 무엇을하기를 희망하십니까? –

+0

이 코드를 사용해야하고이 문제를 표시합니다. – Amin

+0

무엇이 문제이며이 반사 코드를 사용해야하는지, 다른 코드를 리버스 엔지니어링하려고합니까? 직접 코드 작성을 시도해 보셨습니까? –

답변

2

<PrivateImplementationDetails>{4E2292E7-C82C-431F-9529-B0045F4C1457}은 적절한 C# 구조가 아닙니다. 이것은 아마도 ILSpy가 일반 개발자가 사용하지 않아야하는 일부 내부 프레임 워크 함수에 대한 대체 이름입니다.

그래서 코드를 리버스 엔지니어링하여 실제로 수행 할 작업을 이해해야합니다. 그리고 다른 방법으로 구현하십시오. 그냥 가져 가서 사용할 수는 없습니다 :)

그런데 코드는 불필요한 것으로 보이지만 불필요한 지침이 많이 있습니다. 귀하의 경우 전체 루프/스위치가 상태 머신을 멋진 방법으로 코딩합니다. (실행은 항상 순차적 일 수 있으므로 종이와 연필로 수동으로 추적해야합니다. 시도해보십시오. 재미 있습니다!)

+0

을 알지 못하므로이를 해결할 다른 해결책이 없습니까? – Amin

+0

+1 "시도해보십시오, 재미 있습니다!" 의견 혼자 :) –

+0

나는 당신을 이해하지 못한다. 그러나 나는 그 문제를 해결하려고 노력할 것이다. – Amin