Ejemplo n.º 1
0
        /// <summary>通过字典参数调用</summary>
        /// <param name="obj"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public Object InvokeByDictionaryParameter(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));
        }
Ejemplo 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);
        }
Ejemplo 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));
            }
        }
Ejemplo 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);
            }
        }