[英]Decompiling code involving anonymous types and lambda expressions
由于加密的编译器代码,我反编译为一个小的更改的.NET项目不再编译。 这些代码部分可能是由于涉及了lambda表达式和匿名类型。
我试图了解相应的代码片段,以便将它们更改回可以正常工作的/成功编译的语法,但没有成功。
public static void DoEvents()
{
Dispatcher dispatcher = System.Windows.Application.Current.Dispatcher;
Action action;
if (common._Closure\u0024__.\u0024I13\u002D0 != null)
{
action = common._Closure\u0024__.\u0024I13\u002D0;
}
else
{
common._Closure\u0024__.\u0024I13\u002D0 = action
= (Action)(() => { });
}
dispatcher.Invoke(DispatcherPriority.Background, (Delegate)action);
}
我不知道在使用诸如dotPeek之类的工具时,代码反编译的“神秘”结果是否可以避免,如果不能,如何修复它使其可再次编译。
在我看来,您正在尝试反编译System.Windows.Forms.dll中的public static void DoEvents()
方法。 无需这样做,您只需浏览.NET Framework源代码即可。
https://referencesource.microsoft.com/#System.Windows.Forms/
您的方法在Application.cs中
我以前没有像这样处理过代码,但是看起来lambda表达式本身已经正确地反编译了,未反编译的代码是一种优化,以避免每次调用代码时创建新的Action。 (由于给定的lambda没有捕获的变量,因此可以将其视为单例。)
所以我认为有效的起始代码将是:
public static void DoEvents()
{
Dispatcher dispatcher = System.Windows.Application.Current.Dispatcher;
dispatcher.Invoke(DispatcherPriority.Background, () => { });
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.