public void MapTo() { //RuntimeServicePools.TryAdd<IProfileConfiguration, ProfileConfiguration>(); var mapTo = RuntimeServicePools.Singleton <IMapToExpression, MapToExpression>(); //? 为类型“CopyTest”指定代理。 mapTo.Run <CopyToTest, MapToTest>(source => { return(new MapToTest { Id = source.Id, Name = source.Name, Date = source.Date }); }); mapTo.Map <MapToTest>(typeof(CopyToTest), source => null); mapTo.Map <MapToTest>(type => true, source => null); var value = new CopyToTest { Id = 1000, Name = "test", Date = DateTime.Now }; for (int i = 0; i < 100000; i++) { var map1 = value.MapTo <CopyTest>(); value.Name = "test1"; var map2 = value.MapTo <MapToTest>(); //var map3 = value.MapTo<IEnumerable<KeyValuePair<string, object>>>(); //var map4 = value.MapTo<ICollection<KeyValuePair<string, object>>>(); var map5 = value.MapTo <Dictionary <string, object> >(); value.Name = "test5"; } }
public void CopyTo() { var copyTo = new CopyToExpression(); //? 为类型“CopyTest”指定代理。 copyTo.Use((profile, type) => { if (type == typeof(CopyToTest)) { return(source => { var copy = (CopyTest)source; return new CopyTest { Id = copy.Id, Name = copy.Name }; }); } return(profile.Create <CopyTest>(type)); }); RuntimeServicePools.TryAddSingleton <ICopyToExpression>(() => copyTo); var value = new CopyToTest { Id = 1000, Name = "test", Date = DateTime.Now }; for (int i = 0; i < 100000; i++) { var copy1 = value.CopyTo(); value.Name = "test1"; var copy2 = value.CopyTo <CopyTest>(); value.Name = "test5"; } }
/// <summary> /// 对象映射 /// </summary> /// <param name="obj">数据源</param> /// <param name="def">默认值</param> /// <typeparam name="T">目标类型</typeparam> /// <returns></returns> public static T MapTo <T>(this object obj, T def = default) => RuntimeServicePools.Singleton <IMapToExpression, MapToExpression>() .MapTo(obj, def);
/// <summary> /// 对象映射 /// </summary> /// <param name="obj">数据源</param> /// <param name="conversionType">目标类型</param> /// <returns></returns> public static object MapTo(this object obj, Type conversionType) => RuntimeServicePools.Singleton <IMapToExpression, MapToExpression>() .MapTo(obj, conversionType);
/// <summary> /// 对象克隆 /// </summary> /// <param name="obj">数据源</param> /// <param name="def">默认值</param> /// <typeparam name="T">目标类型</typeparam> /// <returns></returns> public static T CopyTo <T>(this T obj, T def = default) => RuntimeServicePools.Singleton <ICopyToExpression, CopyToExpression>() .CopyTo(obj, def);