Могу ли я использовать 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 если вы знаете название поля, вам нужно использовать отражение.

Другие вопросы по тегам