/// <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); } }
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); }); }
/// <summary> /// 使用与指定参数匹配程度最高的构造函数创建指定类型的代理实例。 /// </summary> public static object CreateInstance(Type type, params object[] args) { var proxyType = DynamicTypeCacheManager.GetCache(type); return(InstanceCacheManger.Cache(proxyType, args)); }