[英]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.