From 5046907e4f06776998e04623ce34356696685aa1 Mon Sep 17 00:00:00 2001 From: d4ilys <963922242@qq.com> Date: Tue, 25 Apr 2023 10:29:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=93=8D=E4=BD=9C=E8=A1=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E7=9B=B8=E5=85=B3=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/DynamicCompileBuilder.cs | 80 +++++++++++------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/FreeSql/Internal/DynamicCompileBuilder.cs b/FreeSql/Internal/DynamicCompileBuilder.cs index c857eb74..7c6feba8 100644 --- a/FreeSql/Internal/DynamicCompileBuilder.cs +++ b/FreeSql/Internal/DynamicCompileBuilder.cs @@ -179,47 +179,47 @@ namespace FreeSql.Internal return istance; } - //设置动态对象的属性值,使用表达式目录树 - public static object CreateObjectByType(Type type, Dictionary porpertys) - { - if (type == null) - return null; - object istance = Activator.CreateInstance(type); - if (istance == null) - return null; - //根据字典中的key确定缓存 - var cacheKeyStr = string.Join("-", porpertys.Keys.OrderBy(s => s)); - var cacheKey = Md5Encryption(cacheKeyStr); - var dynamicDelegate = _delegateCache.GetOrAdd(cacheKey, key => - { - //表达式目录树构建委托 - var typeParam = Expression.Parameter(type); - var dicParamType = typeof(Dictionary); - var dicParam = Expression.Parameter(dicParamType); - var exps = new List(); - var tempRef = Expression.Variable(typeof(object)); - foreach (var pinfo in porpertys) - { - var propertyInfo = type.GetProperty(pinfo.Key); - if (propertyInfo == null) - continue; - var propertyName = Expression.Constant(pinfo.Key, typeof(string)); - exps.Add(Expression.Call(dicParam, dicParamType.GetMethod("TryGetValue"), propertyName, tempRef)); - exps.Add(Expression.Assign(Expression.MakeMemberAccess(typeParam, propertyInfo), - Expression.Convert(tempRef, propertyInfo.PropertyType))); - exps.Add(Expression.Assign(tempRef, Expression.Default(typeof(object)))); - } + ////设置动态对象的属性值,使用表达式目录树 + //public static object CreateObjectByType(Type type, Dictionary porpertys) + //{ + // if (type == null) + // return null; + // object istance = Activator.CreateInstance(type); + // if (istance == null) + // return null; + // //根据字典中的key确定缓存 + // var cacheKeyStr = string.Join("-", porpertys.Keys.OrderBy(s => s)); + // var cacheKey = Md5Encryption(cacheKeyStr); + // var dynamicDelegate = _delegateCache.GetOrAdd(cacheKey, key => + // { + // //表达式目录树构建委托 + // var typeParam = Expression.Parameter(type); + // var dicParamType = typeof(Dictionary); + // var dicParam = Expression.Parameter(dicParamType); + // var exps = new List(); + // var tempRef = Expression.Variable(typeof(object)); + // foreach (var pinfo in porpertys) + // { + // var propertyInfo = type.GetProperty(pinfo.Key); + // if (propertyInfo == null) + // continue; + // var propertyName = Expression.Constant(pinfo.Key, typeof(string)); + // exps.Add(Expression.Call(dicParam, dicParamType.GetMethod("TryGetValue"), propertyName, tempRef)); + // exps.Add(Expression.Assign(Expression.MakeMemberAccess(typeParam, propertyInfo), + // Expression.Convert(tempRef, propertyInfo.PropertyType))); + // exps.Add(Expression.Assign(tempRef, Expression.Default(typeof(object)))); + // } - var returnTarget = Expression.Label(type); - exps.Add(Expression.Return(returnTarget, typeParam)); - exps.Add(Expression.Label(returnTarget, Expression.Default(type))); - var block = Expression.Block(new[] { tempRef }, exps); - var @delegate = Expression.Lambda(block, typeParam, dicParam).Compile(); - return @delegate; - }); - var dynamicInvoke = dynamicDelegate.DynamicInvoke(istance, porpertys); - return dynamicInvoke; - } + // var returnTarget = Expression.Label(type); + // exps.Add(Expression.Return(returnTarget, typeParam)); + // exps.Add(Expression.Label(returnTarget, Expression.Default(type))); + // var block = Expression.Block(new[] { tempRef }, exps); + // var @delegate = Expression.Lambda(block, typeParam, dicParam).Compile(); + // return @delegate; + // }); + // var dynamicInvoke = dynamicDelegate.DynamicInvoke(istance, porpertys); + // return dynamicInvoke; + //} /// /// 首字母小写