0

ILSpy と .NET Reflector を使用してコードを確認しましたが、理解できないコードを見つけました。Web で検索しましたが、解決方法に役立つものは見つかりませんでした。ILSpy を使用したこのコード (.NET Reflector は同じものを示します)

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

で、これ何?どうすればそれを解決できますか?それを別の変数に置き換える必要がありますか?

4

1 に答える 1

2

<PrivateImplementationDetails>{4E2292E7-C82C-431F-9529-B0045F4C1457}適切なC#構造ではありません。これはおそらく、ILSpyが内部フレームワーク関数に発行する代替名であり、通常の開発者が使用することは想定されていません。

したがって、コードをリバースエンジニアリングして、実際に何をするのかを理解する必要があります。そして、他の方法でそれを実装します。あなたはそれを持ってそれを使うことはできません:)

ちなみに、コードは難読化されているようですが、不要な命令がたくさんあります。あなたの場合、ループ/スイッチ全体がステートマシンを派手な方法でコーディングします。(実行は常にシーケンシャルである可能性があるため、紙と鉛筆を使用して手動でトレースしてみてください。試してみてください。楽しいです!)

于 2012-04-16T14:10:28.793 に答える