Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
            }
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 /// <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));
 }