我想避免使用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);
}
}
}发布于 2016-03-21 22:43:33
不,你不能,OpCodes.Ldsfld说:
以下
Emit方法重载可以使用ldsfld操作码:
ILGenerator.Emit(OpCode, FieldInfo)要获得FieldInfo,如果您知道字段的名称,则需要使用反射。
https://stackoverflow.com/questions/36142513
复制相似问题