c# - 反编译.Net代码: lambda expressions

标签 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);

最佳答案

它不可能看起来“应该”,因为您正在反编译,所以任何给出相同结果的代码都同样正确。反编译时不可能知道原来的样子,因为任何反编译都必须在几个可能的输入之间进行猜测,不会包括已删除的死代码,等等。

只需将故意无效的名称(在原始编译中使用以保证不与开发人员实际使用的名称冲突)更改为有效的名称,例如 DrawResourcesc__AnonStoreyF 并且除非反编译出错(在这种情况下它无论如何都行不通,尽管如果有的话,它更有可能得到比这里更全面的错误工作的部分)然后你就会有工作代码。然后在整理其余部分时对其进行整理,提供更好的名称和/或根据需要将其变成匿名类。

关于c# - 反编译.Net代码: lambda expressions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667020/

相关文章:

c# - 访问绑定(bind)源列值

.net - WPF 如何决定对缺失字符使用哪种字体?

C#:微软为什么不让 ReadOnlyCollection<T> 继承自 ReadOnlyCollectionBase?

.net - .NET 的 List(Of T).Reverse 方法的范围

c# - 最好的 c# 异常处理开源工具

Java 8 lambda 空列表空检查

lambda - java 8 lambda toMap 显示类型转换错误

c# - 转换到 Func 与新 Func?

c# - 从 C# 运行 Jar 文件

c# - MongoDb批量操作获取id