System.Yaml.Serialization.ReflectionUtils.CreateGetFieldMethod C# (CSharp) Méthode

CreateGetFieldMethod() public static méthode

Generate a method to do 'return (object)object.field;'
public static CreateGetFieldMethod ( FieldInfo fieldInfo ) : object>.Func
fieldInfo System.Reflection.FieldInfo
Résultat object>.Func
        public static Func<object, object> CreateGetFieldMethod(FieldInfo fieldInfo)
        {
            DynamicMethod dynamicMethod = new DynamicMethod(
                string.Concat("_GetF", fieldInfo.Name, "_"),
                typeof(object),
                new Type[] { typeof(object) },
                fieldInfo.DeclaringType);
            ILGenerator generator = dynamicMethod.GetILGenerator();
            generator.Emit(OpCodes.Ldarg_0); // push object onto the stack
            generator.Emit(OpCodes.Ldfld, fieldInfo); // .field

            if (fieldInfo.FieldType.IsValueType)
            {
                generator.Emit(OpCodes.Box, fieldInfo.FieldType); //boxing is required for value types...
            }
            generator.Emit(OpCodes.Ret); // return

            return (Func<object, object>)dynamicMethod.CreateDelegate(typeof(Func<object, object>));
        }