Могу ли я использовать OpCodes.Ldsfld без использования 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);
}
}
}
1 ответ
Решение
Нет, вы не можете, документация дляOpCodes.Ldsfld
говорит:
Следующие
Emit
Перегрузка метода может использоватьldsfld
опкод:
ILGenerator.Emit(OpCode, FieldInfo)
И получить FieldInfo
если вы знаете название поля, вам нужно использовать отражение.