反编译.Net代码:lambda表达式

时间:2016-04-16 16:56:47

标签: c# .net lambda xamarin disassembly

在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);

1 个答案:

答案 0 :(得分:2)

它不应该&#34;应该&#34;看,因为你正在反编译,所以任何给出相同结果的代码都同样正确。在反编译时,它不可能知道原始文件的样子,因为任何反编译都必须猜测几个可能的输入,不包括删除的死代码,等等。

只是将故意无效的名称(在原始编译中用于保证不与开发人员实际使用的名称冲突)更改为有效的内容,如awk 'BEGIN {FS=OFS="|"} NR==FNR{a[$1]=$5;next} $5 in a{$5=a[$1];print $0}' input file > new ,除非反编译出错(在这种情况下,它赢了&#39)无论如何,无论如何,如果有任何事情它更有可能获得这些部分,那么它的错误就比这里更全面了)那么你就会有工作代码。然后在整理其余部分时整理它,给出更好的名字和/或如果你愿意的话将其变成匿名课程。