gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:27:03 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com