/// <summary>通过字典参数调用</summary> /// <param name="obj"></param> /// <param name="parameters">参数数组</param> /// <returns></returns> public Object InvokeWithParams(Object obj, IDictionary parameters) { //// 没有传入参数 //if (parameters == null || parameters.Count < 1) return Invoke(obj, null); //! 注意:有可能没有传入参数,但是该方法是需要参数的,这个时候采用全部null的方法 // 该方法没有参数,无视外部传入参数 var pis = Method.GetParameters(); if (pis == null || pis.Length < 1) { return(Invoke(obj, null)); } Object[] ps = new Object[pis.Length]; for (int i = 0; i < pis.Length; i++) { Object v = null; if (parameters != null && parameters.Contains(pis[i].Name)) { v = parameters[pis[i].Name]; } ps[i] = TypeX.ChangeType(v, pis[i].ParameterType); } return(Handler.Invoke(obj, ps)); }
public override void SetValue(Object obj, Object value) { if (SetHandler == null) { throw new InvalidOperationException("不支持SetValue操作!"); } // 如果类型不匹配,先做类型转换 if (value != null && !Type.IsAssignableFrom(value.GetType())) { value = TypeX.ChangeType(value, Type); } SetHandler.Invoke(obj, value); }
public override Object Invoke(Object obj, params Object[] parameters) { if (parameters == null || parameters.Length <= 0) { return(Handler.Invoke(obj, null)); } else { // 预处理参数类型 var pis = Parameters; for (int i = 0; i < parameters.Length && i < pis.Length; i++) { parameters[i] = TypeX.ChangeType(parameters[i], pis[i].ParameterType); } return(Handler.Invoke(obj, parameters)); } }
public override void SetValue(Object obj, Object value) { // 如果类型不匹配,先做类型转换 if (value != null && !Type.IsAssignableFrom(value.GetType())) { value = TypeX.ChangeType(value, Type); } // SetHandler不支持值类型 if (Field.DeclaringType.IsValueType) { // 不相等才赋值 Object v = GetValue(obj); if (!Object.Equals(value, v)) { Field.SetValue(obj, value); } } else { SetHandler.Invoke(obj, value); } }
/// <summary>类型转换</summary> /// <param name="value">数值</param> /// <param name="conversionType"></param> /// <returns></returns> public override Object ChangeType(Object value, Type conversionType) { return(TypeX.ChangeType(value, conversionType)); }