src/YL.Utils/Reflection/EmitUtil.cs

(完整代码) 897B

using System;
using System.Reflection.Emit;

namespace YL.Utils.Reflection
{
    public class EmitUtil
    {
        public static Func<object> CreateBuilder(Type type)
        {
            DynamicMethod dm = new DynamicMethod(string.Empty, typeof(object), Type.EmptyTypes);
            var gen = dm.GetILGenerator();
            if (type.IsValueType)
            {
                gen.DeclareLocal(type);
                gen.Emit(OpCodes.Ldloca_S, 0);
                gen.Emit(OpCodes.Initobj, type);
                gen.Emit(OpCodes.Ldloc_0);
                gen.Emit(OpCodes.Box, type);
            }
            else
            {
                gen.Emit(OpCodes.Newobj, type.GetConstructor(Type.EmptyTypes));
            }
            gen.Emit(OpCodes.Ret);
            Func<object> func = (Func<object>)dm.CreateDelegate(typeof(Func<object>));
            return func;
        }
    }
}

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。