45得票2回答
为什么Calli比委托调用更快?

我正在玩Reflection.Emit,并发现了鲜为人知的EmitCalli。我很好奇,想知道它是否与常规方法调用有所不同,因此我编写了下面的代码: using System; using System.Diagnostics; using System.Reflection.Emit; u...

27得票5回答
如何使用IL修改装箱结构体

假设我们有一个可变的 struct (别急着开始骂):public struct MutableStruct { public int Foo { get; set; } public override string ToString() { retur...

15得票2回答
IL.Emit方法为什么会添加额外的nop指令?

我有一段代码,其中包含一些IL指令,调用了一个null对象上的string.IndexOf方法: MethodBuilder methodBuilder = typeBuilder.DefineMethod( ...

14得票2回答
在.NET Windows Store应用程序API中,Emit.OpCodes的目的是什么?

我正在考虑将第三方库移植到.NET for Windows Store apps。该库通过调用ILGenerator.Emit方法重度使用System.Reflection.Emit.OpCodes。 .NET for Windows Store Apps API包含了OpCode结构和Op...

13得票2回答
动态创建类型并调用基类的构造函数

我需要动态创建一个类。大部分工作都进行得很好,但我在生成构造函数时卡住了。AssemblyBuilder _assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("MyB...

12得票2回答
ILGenerator捕获异常无效。

我正在使用System.Reflection.Emit生成类型的包装器。在某一点上,可能原始对象在访问时会抛出错误(FaultException),应该被我实现的try {} catch (Exception e) {}捕获,但它并没有。ILSpy正确显示了代码。try { if (o...

11得票2回答
使用Reflection.Emit来发射“using (x) { ... }”块?

我正在尝试在C#中使用Reflection.Emit来发出一个using (x) { ... }块。 在代码中的某个点,我需要获取当前堆栈顶部的对象,该对象实现了IDisposable接口,将其存储在一个局部变量中,对该变量实现using块,然后在其中添加一些其他代码(我可以处理最后一部分)...

8得票3回答
有没有一个好的ILGenerator封装?

我已经使用System.Reflection.Emit一段时间了,发现它(谁不是呢?)很容易出错。 你知道是否有一个好的IL生成器包装器,可以让我更加安全和轻松地生成IL代码,而不是直接使用SRE进行操作吗? 编辑: 我知道操纵表达式树肯定比直接生成IL代码更容易和更安全,但它们现在也有...

8得票3回答
ILGenerator方法内联化

给定以下代码: using System; using System.Reflection.Emit; using System.Diagnostics; using System.Reflection; namespace ConsoleApplication1 { class ...