明らかに、ICSharpCode Decompilerは、C#コンパイラによってラムダ式のために作成された内部クラスを逆コンパイルしません。次の例を考えてみましょう:ラムダ式のネストされたクラスがICSharpCodeで構文木から抜けているDecompiler
場合によっては、C#のラムダ式はラムダ本体を含むメソッドで内部クラスにコンパイルされます。例えば。このようなC#コード:
class MyClass
{
public void MyMethod()
{
Parallel.For(0, 10, i =>
{
... = 3 * i;
})
}
}
は、以下のような内部クラスを追加するコンパイラになります:(。そうでないかもしれない、まさにこのようしかし、あなたのアイデアを得る)
class MyClass
{
public void MyMethod()
...
public class c__DisplayClass2()
{
public int i;
public void b__0()
{
... = 3 * i;
}
}
}
今
問題は、ICSharpCode.Decompiler.Ast.AstBuilder
を使用してMyClass
のアセンブリからASTをプログラムで作成しようとすると、これらの内部クラスはASTに含まれていないことです(他のすべては問題ありません)。 MyClass
のTypeDecleration
の注釈の中でこれらの生成されたクラスを見ることもできます。タイプMono.Cecil.TypeDefinition
の注釈は、NestedTypes
プロパティでこれらの内部クラスを正しくリストします(したがって、アセンブリから正しくロードされました。 、手動で作成された内部クラスは適切に逆コンパイルされます)。
また、私は開かれたこのILSpy問題を参照してください。https://github.com/icsharpcode/ILSpy/issues/686
は、私がここに明らかに何かが足りないのですか?私はGUIを使ってILSpyからアセンブリを見て、問題のコードは適切に逆コンパイルされています(内部クラスではなく、むしろラムダが再構築されます)。