using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace Wood.Util { public static class CommonHelper { public static Guid NewGuid { get { return Guid.NewGuid(); } } public static string NewGuidStr { get { return Guid.NewGuid().ToString(); } } public static DateTime CurrentTime { get { return DateTime.Now; } } public static string CurrentTimeStr { get { DateTime dt = CurrentTime; return dt.ToString("yyyy-MM-dd HH:mm:ss"); } } public static string CurrentMachineName { get { return Environment.MachineName; } } public static string UserName { get { return "Admin"; } } } /// /// Expression动态拼接+泛型缓存 /// /// /// public class EntityMapper//Mapper`2 { private static Func _FUNC = null; static EntityMapper() { ParameterExpression parameterExpression = Expression.Parameter(typeof(TSource), "p"); List memberBindingList = new List(); foreach (var item in typeof(TTarget).GetProperties()) { MemberExpression property = Expression.Property(parameterExpression, typeof(TSource).GetProperty(item.Name)); MemberBinding memberBinding = Expression.Bind(item, property); memberBindingList.Add(memberBinding); } foreach (var item in typeof(TTarget).GetFields()) { MemberExpression property = Expression.Field(parameterExpression, typeof(TSource).GetField(item.Name)); MemberBinding memberBinding = Expression.Bind(item, property); memberBindingList.Add(memberBinding); } MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TTarget)), memberBindingList.ToArray()); Expression> lambda = Expression.Lambda>(memberInitExpression, new ParameterExpression[] { parameterExpression }); _FUNC = lambda.Compile();//拼装是一次性的 } public static TTarget Trans(TSource tSource) { return _FUNC(tSource); } } /// /// 反射实现Mapper /// public class EntityMapper { public static void Trans(TSource tSource, TTarget tTarget, string excludeMembers = "") { string[] excludeMemberArr = excludeMembers.Split(",").Select(itm => itm.Trim()).ToArray(); foreach (var itemOut in tTarget.GetType().GetProperties()) { if (excludeMemberArr.Contains(itemOut.Name)) { continue; } var propIn = tSource.GetType().GetProperty(itemOut.Name); itemOut.SetValue(tTarget, propIn.GetValue(tSource, null), null); } foreach (var itemOut in tTarget.GetType().GetFields()) { if (excludeMemberArr.Contains(itemOut.Name)) { continue; } var fieldIn = tSource.GetType().GetField(itemOut.Name); itemOut.SetValue(tTarget, fieldIn.GetValue(tSource)); } } } }