2011-09-09 7 views
1

.NETでアンコンパイルされたC#コードを修復する必要があります。残念ながら、私のワークステーションには.NET 3.5しかインストールされていないため、コンパイル:空の<>前にC#クラス名

ReportPage.<>c__DisplayClass26 <>c__DisplayClass = new ReportPage.<>c__DisplayClass26(); 

何が<の意味は? この行以外のコードのどこにもc__DisplayClass26文字列はありません。これは、この名前が、逆コンパイル時に欠落したメタ情報から構成されている可能性があります。

+4

ソースを取得します。ほとんどの場合、再コンパイルするためのビューを使用して逆コンパイルしている場合は、おそらく*あなたのコードではないでしょう。 –

+0

そして少なくともC#4.0を見つけてください! 'Visual Studio Express'は無料です:-) – xanatos

答えて

4

C#コンパイラは、変数/フィールド/クラスを導入する必要があります。彼はそれをやらなければならないときに、彼は名前に<>を前置しているので、名前の衝突はありません(C#コンパイラでは、これらの2文字で何かを指定するのは不正です)。これは、yieldキーワード、ラムダ&無名関数/代表団、新asyncキーワード(非同期CTPで導入されており、それはおそらく、C#の5.0に存在するであろう1)...

自動生成されたプロパティのために、たとえば起こります

今、あなたはc__DisplayClass26しか持っていないのは奇妙です。おそらく、あなたの逆コンパイラは、最高のものではありませんでした。 IlSpyでコードを見てみてください。

このペーストビンを見てください:http://pastebin.com/pTRVyVdp(これは私ではありません)。 c__DisplayClassの例があります。テキストの前半には「元の」コードがあり、後半には逆コンパイルのコードがあります。あなたは、この場合、それは閉鎖に使用されていることがわかります。 32/33行には[CompilerGenerated] private sealed class <>c__DisplayClass2があります。あなたはあなたのコードでそれを持っているべきです。

Mmmh ... IlSpyはあまりにも多すぎます:-)多くの場合、CompilerGeneratedコードから「元の」コードを再構築できます。

2

これはコンパイラ生成クラスです。これは、ReportPageクラスのメソッドの内部で匿名の代理人またはラムダから作成された可能性が最も高いです。

デコンパイルされたコードでは、これがどこで使用されているのかを確認して、元に戻すために何をしているのか把握してください。

4

xanatosが正しい。クロージャのセマンティクスを実装するために自動的に生成されたクラスを調べています。

それはあなたに代わって何かを作るために持っていたときにC#コンパイラが生成する魔法の名前を解釈する私の便利なガイドはここにある:

Where to learn about VS debugger 'magic names'

しかし、再び、私はあなたがこれに頼るべきではないことを強調しましょう;これは娯楽目的のためのものです。当社はいつでもこの制度を変更する権利を留保します。

関連する問題