zoukankan      html  css  js  c++  java
  • 实体类型互转

     // S:源类型    T:目标类型  
            static List<T> ByExpTree<S, T>(List<S> list)
            {
                var props = typeof(S).GetProperties().Where(p => typeof(T).GetProperty(p.Name) != null).Select(x => new { a = x, b = typeof(T).GetProperty(x.Name) });
                var param = Expression.Parameter(typeof(S), "x");
                List<Expression> exps = new List<Expression>();
                var cre = Expression.New(typeof(T));
                var newb = Expression.Variable(typeof(T));
                var assb = Expression.Assign(newb, cre);
                exps.Add(assb);
                foreach (var item in props)
                {
                    var getexp = Expression.MakeMemberAccess(param, item.a);
                    var setexp = Expression.MakeMemberAccess(newb, item.b);
                    var ass = Expression.Assign(setexp, getexp);
                    exps.Add(ass);
                }
                exps.Add(newb);
                var body = Expression.Block(new ParameterExpression[] { newb }, exps);
                var sel = Expression.Lambda<Func<S, T>>(body, param);
                return list.Select(sel.Compile()).ToList();
            }
    

      PS:代码来源于网络,原本为固定类型互转,测试后发现此方式比反射及利用json快很多,修改调整为泛型方法,仅作记录。   有时我们仅有为数不多的类需要进行转换,不想使用第三方的map库,可使用此方法。

  • 相关阅读:
    逆序数———线段树/树状数组
    线段树 模板
    博弈论--对称博弈
    matlab程序设计
    matlab矩阵的操作
    2nd 历年学生作品评论(3部)
    1st 四人小组项目
    1st 本周工作量及进度统计
    1st 结对编程:简易四则运算
    1st 英文文章词频统计
  • 原文地址:https://www.cnblogs.com/coder-soldier/p/11752559.html
Copyright © 2011-2022 走看看