Пример #1
0
        /// <summary>
        ///     动态添加List元素
        /// </summary>
        /// <param name="fieldInfo">字段类型</param>
        /// <param name="entity">所属实体变量</param>
        /// <param name="methodName">方法名称,默认是Add</param>
        private static void AddItem(FieldInfo fieldInfo, object entity, string methodName = "Add")
        {
            // 非泛型,退出执行
            if (!fieldInfo.FieldType.IsGenericType)
            {
                return;
            }

            var lstVal = FieldGetCacheManger.Cache(fieldInfo, entity);

            // 空时,反射创建
            if (lstVal == null)
            {
                lstVal = InstanceCacheManger.Cache(fieldInfo.FieldType);
                FieldSetCacheManger.Cache(fieldInfo, entity, lstVal);
            }

            // 获取执行方法
            var method = fieldInfo.FieldType.GetMethod(methodName);

            if (method == null)
            {
                return;
            }

            var lstParamInstance = new List <object>();

            foreach (var parameterInfo in method.GetParameters())
            {
                // 反射创建子元素
                object item;
                if (parameterInfo.ParameterType == typeof(string))
                {
                    item = string.Empty;
                }
                else
                {
                    item = parameterInfo.ParameterType.IsClass ? InstanceCacheManger.Cache(parameterInfo.ParameterType) : 0;
                }
                lstParamInstance.Add(item);
            }
            method.Invoke(lstVal, lstParamInstance.ToArray());

            // 添加子元素到List中
            foreach (var field in lstVal.GetType().GetFields())
            {
                AddItem(field, lstVal);
            }
            foreach (var property in lstVal.GetType().GetProperties())
            {
                AddItem(property, lstVal);
            }
        }
Пример #2
0
        static void TestTableInstance(int count = 10000)
        {
            var tableType = typeof(Table);

            var type = typeof(TableSet <UserVO>);

            SpeedTest.ConsoleTime("手动创建", count, () =>
            {
                var table = new Table();
            });
            SpeedTest.ConsoleTime("表达式树创建", count, () =>
            {
                var table = (Table)InstanceCacheManger.Cache(tableType);
            });
            SpeedTest.ConsoleTime("反射创建", count, () =>
            {
                var table = (Table)Activator.CreateInstance(tableType);
            });
        }
Пример #3
0
        /// <summary>
        ///     使用与指定参数匹配程度最高的构造函数创建指定类型的代理实例。
        /// </summary>
        public static object CreateInstance(Type type, params object[] args)
        {
            var proxyType = DynamicTypeCacheManager.GetCache(type);

            return(InstanceCacheManger.Cache(proxyType, args));
        }