簡體   English   中英

轉換C#代碼

[英]Convert C# code

我需要在C#代碼(使用ilGenerator.Emit)中模擬以下功能

public void AssignAttribute(ref ValueHolder output, Assignment assignment) {
    ResultAttribute attribute = null;

    if ( (attribute = output.MultipleResults.Find(delegate(ResultAttribute o) {
        return o.Name == assignment.Name;
    })) != null)
        attribute.Value = assignment.Value;
    }

有誰能夠幫助我?

要做的事情是在項目C#中編譯該方法,然后查看它使用Reflector生成的程序集中的IL。 您可以使用Emit輕松復制該IL,並進行所需的任何動態更改。

C#為您創建一個閉包(如果您不熟悉,請參見Wikipedia),因為在匿名方法主體中您引用了賦值變量(在您的情況下為參數,但這無關緊要)。

您需要為匿名委托創建類持有人(至少由c#編譯器執行此操作)

那么您需要在此類中創建字段,因為您的委托代理人(我不是英語,所以這里可能拼寫錯誤)

然后,在AssignAttribute主體中,您應該發出類實例化IL_0000:newobj實例void V24.Generated.Worker /'<> c__DisplayClass1'::。ctor()

以及虛假分配IL_0008:stfld類[nviss] NViss.Assignment V24.Generated.Worker /'<> c__DisplayClass1':: assignment

請注意,由於歸檔初始化完成后,對本地變量的任何訪問都被替換為對字段的訪問

再次抱歉我的英語

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM