Exemple #1
0
        /// <summary>
        /// 属性赋值
        /// </summary>
        /// <param name="type"></param>
        /// <param name="obj"></param>
        /// <param name="property"></param>
        /// <param name="val"></param>
        public static void Setter(Type type, Object obj, PropertyInfo property, object val)
        {
            lock (_syncRoot)
            {
                var name = type.FullName + property.Name + "Setter";

                if (_invokeInfos.ContainsKey(name))
                {
                    _invokeInfos[name].Invoke(obj, val);
                }
                else
                {
                    var del = FastInvoke.GetMethodInvoker(property.GetSetMethod(true));
                    _invokeInfos.Add(name, del);
                    del.Invoke(obj, val);
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// 属性取值
        /// </summary>
        /// <param name="type"></param>
        /// <param name="obj"></param>
        /// <param name="property"></param>
        /// <returns></returns>

        public static object Getter(Type type, Object obj, PropertyInfo property)
        {
            lock (_syncRoot)
            {
                var name = type.FullName + property.Name + "Getter";

                if (_invokeInfos.ContainsKey(name))
                {
                    return(_invokeInfos[name].Invoke(obj));
                }
                else
                {
                    var del = FastInvoke.GetMethodInvoker(property.GetGetMethod(true));
                    _invokeInfos.Add(name, del);
                    return(del.Invoke(obj));
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// 将List~object转换成List~T
        /// </summary>
        /// <param name="params"></param>
        /// <returns></returns>
        public static object ToGList(this List <object> @params)
        {
            var type = @params.GetType();

            var stype = type.GenericTypeArguments[0];

            var gtype = type.GetGenericTypeDefinition().MakeGenericType(stype);

            var result = Activator.CreateInstance(gtype);

            var addMethod = gtype.GetMethod("AddRange");

            var methodInvoker = FastInvoke.GetMethodInvoker(addMethod);

            methodInvoker.Invoke(result, @params.ToArray());

            return(result);
        }