/// <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)); }
/// <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); }
/// <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); }
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); }
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); }
public MemberMapping(DynamicMemberHandle fromMemberHandle, DynamicMemberHandle toMemberHandle) { FromMemberHandle = fromMemberHandle; ToMemberHandle = toMemberHandle; }