[英]Can I use OpCodes.Ldsfld without using FieldInfo?
我想避免使用 GetType 和 GetField。 我可以只在 Ldsfld 中使用字符串吗? 我在下面包含了我要完成的工作的模型。 正如您所看到的,我是 IL Generation 的新手 - 我正在尝试消除一些成本,即我的应用程序中的反射成本。
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
的名称, FieldInfo
获取FieldInfo
,您需要使用反射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.