Exemplo n.º 1
0
        /// <summary>
        /// Gets an object's field value.
        /// </summary>
        /// <param name="target">Object whose field value to get.</param>
        /// <param name="fieldName">The name of the field.</param>
        /// <returns>The value of the field.</returns>
        public static object GetFieldValue(
            object target, string fieldName)
        {
            DynamicMemberHandle handle = MethodCaller.GetCachedField(target.GetType(), fieldName);

            return(handle.DynamicMemberGet.Invoke(target));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Sets an object's field with the specified value,
        /// coercing that value to the appropriate type if possible.
        /// </summary>
        /// <param name="target">Object containing the field to set.</param>
        /// <param name="fieldName">Name of the field (public or non-public) to set.</param>
        /// <param name="value">Value to set into the field.</param>
        public static void SetFieldValue(
            object target, string fieldName, object value)
        {
            DynamicMemberHandle handle = MethodCaller.GetCachedField(target.GetType(), fieldName);

            SetValueWithCoercion(target, handle, value);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Sets an object's property with the specified value,
        /// coercing that value to the appropriate type if possible.
        /// </summary>
        /// <param name="target">Object containing the property to set.</param>
        /// <param name="propertyName">Name of the property to set.</param>
        /// <param name="value">Value to set into the property.</param>
        public static void SetPropertyValue(
            object target, string propertyName, object value)
        {
            DynamicMemberHandle handle = MethodCaller.GetCachedProperty(target.GetType(), propertyName);

            SetValueWithCoercion(target, handle, value);
        }
Exemplo n.º 4
0
        private static void SetValueWithCoercion(object target, DynamicMemberHandle handle, object value)
        {
            var oldValue = handle.DynamicMemberGet(target);

            Type pType = handle.MemberType;

#if NETSTANDARD && !NETSTANDARD2_0
            var isGeneric   = pType.IsGenericType();
            var isPrimitive = pType.IsPrimitive();
            var isValueType = pType.IsValueType();
#else
            var isGeneric   = pType.IsGenericType;
            var isPrimitive = pType.IsPrimitive;
            var isValueType = pType.IsValueType;
#endif
            if (!isGeneric ||
                (isGeneric && pType.GetGenericTypeDefinition() != typeof(Nullable <>)))
            {
                if (isValueType && (isPrimitive || pType == typeof(decimal)) && value == null)
                {
                    value = 0;
                }
            }

            if (value != null)
            {
                Type vType = Utilities.GetPropertyType(value.GetType());
                value = Utilities.CoerceValue(pType, vType, oldValue, value);
            }
            handle.DynamicMemberSet(target, value);
        }
Exemplo n.º 5
0
        private static void SetValueWithCoercion(object target, DynamicMemberHandle handle, object value)
        {
            var oldValue = handle.DynamicMemberGet(target);

            Type pType = handle.MemberType;

            if (!pType.IsGenericType ||
                (pType.IsGenericType && pType.GetGenericTypeDefinition() != typeof(Nullable <>)))
            {
                if (pType.IsValueType && (pType.IsPrimitive || pType == typeof(decimal)) && value == null)
                {
                    value = 0;
                }
            }

            if (value != null)
            {
                Type vType = Utilities.GetPropertyType(value.GetType());
                value = Utilities.CoerceValue(pType, vType, oldValue, value);
            }
            handle.DynamicMemberSet(target, value);
        }
Exemplo n.º 6
0
 public MemberMapping(DynamicMemberHandle fromMemberHandle, DynamicMemberHandle toMemberHandle)
 {
     FromMemberHandle = fromMemberHandle;
     ToMemberHandle   = toMemberHandle;
 }