在 Xamarin Assembly Browser 中反汇编类库我遇到了无效语法 in the source
InventoryTab.<DrawResources>c__AnonStoreyF <DrawResources>c__AnonStoreyF =
new InventoryTab.<DrawResources>c__AnonStoreyF ();
这样的输出对应什么代码?
编辑 1
lambda(感谢 D Stanley)反汇编的整个相关部分是
InventoryTab.<DrawResources>c__AnonStoreyF <DrawResources>c__AnonStoreyF =
new InventoryTab.<DrawResources>c__AnonStoreyF ();
<DrawResources>c__AnonStoreyF.tooltipText = "some string";
if (current.availableCount > -1) {
InventoryTab.<DrawResources>c__AnonStoreyF arg_432_0 =
<DrawResources>c__AnonStoreyF;
string tooltipText = <DrawResources>c__AnonStoreyF.tooltipText;
arg_432_0.tooltipText = string.Concat (new string[] {
tooltipText,
// and some more strings...
"\n\n"
});
}
TipSignal tipSignal = new TipSignal (() =>
<DrawResources>c__AnonStoreyF.tooltipText,
<DrawResources>c__AnonStoreyF.tooltipText.GetHashCode ()
);
TooltipHandler.TipRegion (rect, tipSignal);
现在我想弄清楚 lambda 应该 可能是什么样子。
编辑2
TipSignal 定义为
public TipSignal (string text, int uniqueId);
编辑3
以下代码可以替代 lambda 吗?
string tooltipText = "some string";
if (current.availableCount > -1) {
tooltipText = string.Concat (new string[] {
tooltipText,
// and some more strings...
"\n\n"
});
}
TipSignal tipSignal = new TipSignal (tooltipText, tooltipText.GetHashCode ());
TooltipHandler.TipRegion (rect, tipSignal);
最佳答案
它不可能看起来“应该”,因为您正在反编译,所以任何给出相同结果的代码都同样正确。反编译时不可能知道原来的样子,因为任何反编译都必须在几个可能的输入之间进行猜测,不会包括已删除的死代码,等等。
只需将故意无效的名称(在原始编译中使用以保证不与开发人员实际使用的名称冲突)更改为有效的名称,例如 DrawResourcesc__AnonStoreyF
并且除非反编译出错(在这种情况下它无论如何都行不通,尽管如果有的话,它更有可能得到比这里更全面的错误工作的部分)然后你就会有工作代码。然后在整理其余部分时对其进行整理,提供更好的名称和/或根据需要将其变成匿名类。
关于c# - 反编译.Net代码: lambda expressions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667020/