我想避免使用GetType和GetField。我可以在Ldsfld中使用字符串吗?我在下面提供了我要完成的工作的模型。如您所见,我是IL生成的新手-我正在尝试消除一些成本,这些成本是我的应用程序中反射的成本。
using System;
using System.Reflection.Emit;
namespace ConsoleApplication10
{
static class Program
{
public static string TextBox1 = "Hello World!";
static void Main(string[] args)
{
var dm = new DynamicMethod("My_method",
typeof(string), null, true);
var il = dm.GetILGenerator();
il.Emit(OpCodes.Ldsfld, "string ConsoleApplication10.Program::TextBox1");
il.Emit(OpCodes.Ret);
var func = (Func<string>)dm.CreateDelegate(typeof(Func<string>));
var s = func();
Console.WriteLine(s);
}
}
}
不,您不能,有关的文档OpCodes.Ldsfld
说:
以下
Emit
方法重载可以使用ldsfld
操作码:
ILGenerator.Emit(OpCode, FieldInfo)
为了弄清楚FieldInfo
字段的名称,您需要使用反射。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句