HigLabo.Mapper,使用表达式树在10天内打造世界上最快的对象映射器
世界上最快的映射器,易于使用,零配置,完全可定制
引言
目前,最新版本的HigLabo.Mapper
支持.NET8。您可以从Nuget使用它。
四年前(2015年),我用IL代码创建了对象映射器的初始版本。就在几周前,我决定使用表达式树重新实现HigLabo.Mapper
,并取得了巨大的性能提升。它目前在全球范围内速度最快。GitHub仓库是https://github.com/higty/higlabo。
您可以在https://github.com/higty/higlabo.netstandard/tree/master/HigLabo.Mapper查看我10天的提交日志
目前,我刚刚在.NET6上发布了HigLabo.Mapper
。最新版本的HigLabo.Mapper
在这里。
您可以从支持DateOnly
、TimeOnly
类型的Nuget中使用。
您可以从Nuget下载。
HigLabo.Mapper
(版本6.1.x.x)
背景
如今,无论您是Web、桌面还是移动开发人员,您都可能使用一些POCO、DTO对象。并且您必须将属性值从一个对象传输到另一个对象。在这种情况下,对象映射器非常有用。这一次,我重新实现的目的是如下:
- 世界上最快
- 零配置,提高生产力
- 完全可定制,适应各种用例
- 应用程序的多个映射规则
如何使用?
您可以从Nuget包获取HigLabo.Mapper
(版本6.1.0.0或更高版本)。
在您的应用程序中添加using
指令
using HigLabo.Core;
现在您可以像这样使用Map
扩展方法
var a1 = new Address(); //your POCO class.
var a2 = a1.Map(new Address());
HigLabo.Mapper
支持Dictionary
到Object
的映射。
var d = new Dictionary<String, String>();
d["Name"] = "Bill";
var person = d.Map(new Person());
//person.Name is "Bill"
也支持Object
到Dictionary
的映射。
var p = new Person();
p.Name = "Bill";
var d = p.Map(new Dictionary<String, String>);
//d["Name"] is "Bill"
我设计的HigLabo.Mapper
易于使用。
与其他映射器的比较
在本章中,我将解释与其他映射器库的区别。这是比较摘要。
- 性能
- 初始配置
- 自定义
- 多重设置
性能!!!
这对映射器库很重要,因为它往往会在循环内部等更深层的地方使用。性能测试摘要在此。
- 比AutoMapper快3-4倍(对于不包含集合属性的POCO)
- 比Mapster快10%-20%(对于不包含集合属性的POCO)
- 比AgileMapper、FastMapper、TinyMapper快7-10倍(对于不包含集合属性的POCO)
- 比AutoMapper快3倍(对于包含集合属性的POCO)
- 比Mapster快10倍(对于包含集合属性的POCO)
- 比AgileMapper、FastMapper、TinyMapper快10-20倍(对于包含集合属性的POCO)
这是使用BenchmarkDotNet的性能测试结果。HigLaboObjectMapper_XXXX
是新HigLabo.Mapper
的结果。
这是用于性能测试的类。
public class Address
{
public int Id { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string Country { get; set; }
public AddressType AddressType { get; set; }
}
public class AddressDTO
{
public int Id { get; set; }
public string City { get; set; }
public string Country { get; set; }
public AddressType AddressType { get; set; } = AddressType.House;
}
public struct GpsPosition
{
public double Latitude { get; private set; }
public double Longitude { get; private set; }
public GpsPosition(double latitude, double longitude)
{
this.Latitude = latitude;
this.Longitude = longitude;
}
}
public class Customer
{
public Int32? Id { get; set; }
public String Name { get; set; }
public Address Address { get; set; }
public Address HomeAddress { get; set; }
public Address[] AddressList { get; set; }
public IEnumerable<Address> WorkAddressList { get; set; }
}
public class CustomerDTO
{
public Int32? Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public AddressDTO HomeAddress { get; set; }
public AddressDTO[] AddressList { get; set; }
public List<AddressDTO> WorkAddressList { get; set; }
public String AddressCity { get; set; }
}
我测试了以下四种类型的映射
1. POCO class without collection property to same class.
XXX.Map(new Address(), new Address())
2. POCO class without collection property to other class.
XXX.Map(new Address(), new AddressDTO())
3. POCO class that has collection property map to same class.
XXX.Map(new Customer(), new Customer())
4. POCO class that has collection property map to other class.
XXX.Map(new Customer(), new CustomerDTO());
正如您所见,所有四种情况HigLabo.Mapper
都是最快的。
您可以在此链接中查看完整的测试代码。
初始配置
一些Mapper
需要初始配置,如下所示
var configuration = new AutoMapper.MapperConfiguration(config => {
config.CreateMap<Building, Building>();
config.CreateMap<TreeNode, TreeNode>();
});
这是AutoMapper
的配置代码。如果您有成千上万个类需要映射,创建这些映射配置代码会非常繁琐。TinyMapper
也需要配置。
TinyMapper.Bind<Park, Park>();
TinyMapper.Bind<Customer, CustomerDTO>();
TinyMapper.Bind<Dictionary<String, String>, Building>();
HigLabo.Mapper
不需要任何配置。您可以开箱即用地使用它。
自定义
有时,您想针对POCO对象自定义映射规则。AutoMapper
的自定义映射规则非常复杂。我在这页的示例中比较了AutoMapper
和HigLabo.Mapper
。
class Source {
public int Id {get;set;}
public int UseThisInt {get;set;}
public InnerType Inner {get;set;}
// other properties that the Destination class is not interested in
}
class InnerType {
public int Id {get;set;}
public int Height {get;set;}
// more inner properties
}
class Destination {
public int Id {get;set;}
public int UseThisInt {get;set;}
public int Height {get;set;}
// more inner properties that should map to InnerType
}
//So many configuration and complicated....
Mapper.Initialize(cfg => {
cfg.CreateMap<source, destination="">();
cfg.CreateMap<innertype, destination="">();
});
var dest = Mapper.Map<destination>(src);
Mapper.Map(src.Inner, dest);
Mapper.Initialize(cfg => {
cfg.CreateMap<source, destination="">()AfterMap
((src, dest) => Mapper.Map(src.Inner, dest));
cfg.CreateMap<innertype, destination="">();
});
var dest = Mapper.Map<destination>(src);
如果您使用AutoMapper
,您必须了解AutoMapper
库,例如Mapper.Initialize
、ForMember
、CreateMap
、AfterMap
等。
HigLabo.Mapper
可以这样自定义
c.AddPostAction<Source, Destination>((s, d) =>
{
d.Id = s.Inner.Id;
//Set Inner object property to Destination object
s.Inner.Map(d);
});
调用Map
方法时,HigLabo.Mapper
会在映射完成后简单地调用此Lambda。因此,您可以覆盖默认的映射规则。
您可以使用ReplaceMap
方法像这样完全替换映射规则
c.ReplaceMap<Source, Destination>((s, d) =>
{
//Set all map with your own.
d.Id = s.Inner.Id;
//Set Inner object property to Destination object
s.Inner.Map(d);
});
//You can call Map method.
var source = new Source();
var destination = new Destination();
source.Map(distination); //Above lambda will be called.
它很简单,不需要额外的知识。您只需要了解您已经使用的C# Lambda。
您可以轻松添加转换逻辑。
c.AddPostAction<Person, PersonVM>((s, d) =>
{
d.BMI = CalculateBMI(s.Height, s.Weight);
});
您还可以使用条件属性映射。
c.AddPostAction<Employee, EmployeeVM>((s, d) =>
{
if (s.EmployeeType == EmployeeType.Contract)
{
d.Property1 = someValue1;
}
else
{
d.Property1 = someValue2;
}
});
这种设计的另一个优点是您可以轻松调试代码。您可以在AddPostAction
、ReplaceMap
方法的Lambda中设置断点。
您还可以这样自定义属性映射规则
class Person
{
public string Name { get; set; }
public string Position_Name { get; set; }
}
class PersonModel
{
public string Name { get; set; }
public string PositionName { get; set; }
}
var mapper = HigLabo.Core.ObjectMapper.Default;
mapper.CompilerConfig.PropertyMatchRule =
(sourceType, sourceProperty, targetType, targetProperty)
{
if (sourceType == typeof(Person) && targetType == typeof(PersonModel))
{
return sourceProperty.Name.Replace("_", "") == targetProperty.Name;
}
return false;
};
多重设置
您可以创建多个ObjectMapper
类的实例。
var om1 = new ObjectMapper();
om1.AddPostAction<Address, Address>((s, d) =>
{
//Custom map rule
});
var om2 = new ObjectMapper();
om2.AddPostAction<Address, Address>((s, d) =>
{
//Another Custom map rule
});
var a = new Address();
var a1 = om1.Map(a, new Address());
var a2 = om1.Map(a, new Address());
Map扩展方法声明在ObjectMapperExtensions
类中。此方法简单地调用ObjectMapper.Default
实例的方法。
using System;
namespace HigLabo.Core
{
public static class ObjectMapperExtensions
{
public static TTarget Map<TSource, TTarget>(this TSource source, TTarget target)
{
return ObjectMapper.Default.Map(source, target);
}
public static TTarget MapOrNull<TSource, TTarget>
(this TSource source, Func<TTarget> targetConstructor)
where TTarget : class
{
return ObjectMapper.Default.MapOrNull(source, targetConstructor);
}
public static TTarget MapOrNull<TSource, TTarget>
(this TSource source, TTarget target)
where TTarget : class
{
return ObjectMapper.Default.MapOrNull(source, target);
}
public static TTarget MapFrom<TTarget, TSource>
(this TTarget target, TSource source)
{
return ObjectMapper.Default.Map(source, target);
}
}
}
所以,您可以创建一个新实例并添加新规则并使用它。
您可以像这样封装初始化代码
public static class ObjectMapperExtensions
{
public static void Initialize(this ObjectMapper mapper)
{
mapper.AddPostAction<Address, Address>((s, d) =>
{
//Your mapping rule.
});
mapper.AddPostAction<Address, Address>((s, d) =>
{
//Another your mapping rule.
});
}
}
//And call it on Application initialization process.
ObjectMapper.Default.Initialize();
映射的测试用例
我在这里创建了所有测试用例
我测试了除了1个Dictionary
自定义映射用例之外,前版本支持的所有用例。
但是我认为,由于这是初始版本,可能包含一些罕见的异常情况。如果您遇到异常,请随时在CodeProject或GitHub问题上提问。
深入了解生成的表达式树
测试用例在这里。
ObjectMapper_Map_ValueType_ValueType
测试用例将生成如下的表达式树代码
.Lambda #Lambda1<System.Func`3[System.Object,System.Object,HigLabo.Mapper.Test.Vector2]>(
System.Object $sourceParameter,
System.Object $targetParameter) {
.Block(
HigLabo.Mapper.Test.Vector2 $source,
HigLabo.Mapper.Test.Vector2 $target) {
$source = .Unbox($sourceParameter);
$target = .Unbox($targetParameter);
.Call $target.set_X($source.X);
.Call $target.set_Y($source.Y);
$target
}
}
地址到AddressDTO
将生成此表达式树作为MapAction Func
。
.Lambda #Lambda1<System.Func`3[System.Object,System.Object,
HigLabo.Mapper.PerformanceTest.AddressDTO]>(
System.Object $sourceParameter,
System.Object $targetParameter) {
.Block(
HigLabo.Mapper.PerformanceTest.Address $source,
HigLabo.Mapper.PerformanceTest.AddressDTO $target) {
$source = $sourceParameter .As HigLabo.Mapper.PerformanceTest.Address;
$target = $targetParameter .As HigLabo.Mapper.PerformanceTest.AddressDTO;
.Call $target.set_Id($source.Id);
.Call $target.set_City($source.City);
.Call $target.set_Country($source.Country);
.Call $target.set_AddressType($source.AddressType);
$target
}
}
ObjectMapper_Map_CollectionElementCreateMode_CollectionElementCreateMode_NewObject
将生成以下代码
.Lambda #Lambda1<System.Func`3[System.Object,System.Object,HigLabo.Mapper.Test.User]>(
System.Object $sourceParameter,
System.Object $targetParameter) {
.Block(
HigLabo.Mapper.Test.User $source,
HigLabo.Mapper.Test.User $target) {
$source = $sourceParameter .As HigLabo.Mapper.Test.User;
$target = $targetParameter .As HigLabo.Mapper.Test.User;
.Call $target.set_Value($source.Value);
.Call $target.set_Name($source.Name);
.Call $target.set_Int32($source.Int32);
.Call $target.set_Int32Nullable($source.Int32Nullable);
.Call $target.set_Int32_Nullable($source.Int32_Nullable);
.Call $target.set_Int32NullableToInt32($source.Int32NullableToInt32);
.Call $target.set_DateTime($source.DateTime);
.Call $target.set_DateTimeNullable($source.DateTimeNullable);
.Call $target.set_Decimal($source.Decimal);
.Call $target.set_DecimalNullable($source.DecimalNullable);
.Call $target.set_DayOfWeek($source.DayOfWeek);
.Call $target.set_DayOfWeekNullable($source.DayOfWeekNullable);
.Call $target.set_Guid($source.Guid);
.Call $target.set_GuidNullable($source.GuidNullable);
.If ($source.MapPoint == null) {
.Call $target.set_MapPoint(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If ($target.MapPoint == null) {
$target.MapPoint = .New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call ($target.MapPoint).set_Longitude(($source.MapPoint).Longitude);
.Call ($target.MapPoint).set_Latitude(($source.MapPoint).Latitude)
}
};
.Call $target.set_VectorToNullable($source.VectorToNullable);
.Call $target.set_Vector2($source.Vector2);
.If ($source.ParentUser == null) {
.Call $target.set_ParentUser(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If ($target.ParentUser == null) {
$target.ParentUser = .New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call ($target.ParentUser)
.set_Value(($source.ParentUser).Value);
.Call ($target.ParentUser)
.set_Name(($source.ParentUser).Name);
.Call ($target.ParentUser)
.set_Int32(($source.ParentUser).Int32);
.Call ($target.ParentUser).set_Int32Nullable
(($source.ParentUser).Int32Nullable);
.Call ($target.ParentUser).set_Int32_Nullable
(($source.ParentUser).Int32_Nullable);
.Call ($target.ParentUser).set_Int32NullableToInt32
(($source.ParentUser).Int32NullableToInt32);
.Call ($target.ParentUser)
.set_DateTime(($source.ParentUser).DateTime);
.Call ($target.ParentUser).set_DateTimeNullable
(($source.ParentUser).DateTimeNullable);
.Call ($target.ParentUser)
.set_Decimal(($source.ParentUser).Decimal);
.Call ($target.ParentUser).set_DecimalNullable
(($source.ParentUser).DecimalNullable);
.Call ($target.ParentUser).set_DayOfWeek
(($source.ParentUser).DayOfWeek);
.Call ($target.ParentUser).set_DayOfWeekNullable
(($source.ParentUser).DayOfWeekNullable);
.Call ($target.ParentUser)
.set_Guid(($source.ParentUser).Guid);
.Call ($target.ParentUser).set_GuidNullable
(($source.ParentUser).GuidNullable);
.If (($source.ParentUser).MapPoint == null) {
.Call ($target.ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If (($target.ParentUser).MapPoint == null) {
($target.ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call (($target.ParentUser).MapPoint).set_Longitude
((($source.ParentUser).MapPoint).Longitude);
.Call (($target.ParentUser).MapPoint).set_Latitude
((($source.ParentUser).MapPoint).Latitude)
}
};
.Call ($target.ParentUser).set_VectorToNullable
(($source.ParentUser).VectorToNullable);
.Call ($target.ParentUser)
.set_Vector2(($source.ParentUser).Vector2);
.If (($source.ParentUser).ParentUser == null) {
.Call ($target.ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If (($target.ParentUser).ParentUser == null) {
($target.ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call (($target.ParentUser).ParentUser).set_Value
((($source.ParentUser).ParentUser).Value);
.Call (($target.ParentUser).ParentUser).set_Name
((($source.ParentUser).ParentUser).Name);
.Call (($target.ParentUser).ParentUser).set_Int32
((($source.ParentUser).ParentUser).Int32);
.Call (($target.ParentUser).ParentUser).set_Int32Nullable
((($source.ParentUser).ParentUser).Int32Nullable);
.Call (($target.ParentUser).ParentUser).set_Int32_Nullable
((($source.ParentUser).ParentUser).Int32_Nullable);
.Call (($target.ParentUser)
.ParentUser).set_Int32NullableToInt32
((($source.ParentUser)
.ParentUser).Int32NullableToInt32);
.Call (($target.ParentUser).ParentUser).set_DateTime
((($source.ParentUser).ParentUser).DateTime);
.Call (($target.ParentUser).ParentUser).set_DateTimeNullable
((($source.ParentUser).ParentUser).DateTimeNullable);
.Call (($target.ParentUser).ParentUser).set_Decimal
((($source.ParentUser).ParentUser).Decimal);
.Call (($target.ParentUser).ParentUser).set_DecimalNullable
((($source.ParentUser).ParentUser).DecimalNullable);
.Call (($target.ParentUser).ParentUser).set_DayOfWeek
((($source.ParentUser).ParentUser).DayOfWeek);
.Call (($target.ParentUser).ParentUser).set_DayOfWeekNullable
((($source.ParentUser).ParentUser).DayOfWeekNullable);
.Call (($target.ParentUser).ParentUser).set_Guid
((($source.ParentUser).ParentUser).Guid);
.Call (($target.ParentUser).ParentUser).set_GuidNullable
((($source.ParentUser).ParentUser).GuidNullable);
.If ((($source.ParentUser).ParentUser).MapPoint == null) {
.Call (($target.ParentUser).ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If ((($target.ParentUser)
.ParentUser).MapPoint == null) {
(($target.ParentUser).ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call ((($target.ParentUser).ParentUser).MapPoint)
.set_Longitude
(((($source.ParentUser).ParentUser).MapPoint)
.Longitude);
.Call ((($target.ParentUser).ParentUser).MapPoint)
.set_Latitude
(((($source.ParentUser).ParentUser).MapPoint)
.Latitude)
}
};
.Call (($target.ParentUser).ParentUser).set_VectorToNullable
((($source.ParentUser).ParentUser).VectorToNullable);
.Call (($target.ParentUser).ParentUser).set_Vector2
((($source.ParentUser).ParentUser).Vector2);
.If ((($source.ParentUser).ParentUser).ParentUser == null) {
.Call (($target.ParentUser).ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If ((($target.ParentUser)
.ParentUser).ParentUser == null) {
(($target.ParentUser).ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Value
(((($source.ParentUser).ParentUser)
.ParentUser).Value);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Name
(((($source.ParentUser).ParentUser)
.ParentUser).Name);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Int32
(((($source.ParentUser).ParentUser)
.ParentUser).Int32);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Int32Nullable
(((($source.ParentUser).ParentUser)
.ParentUser).Int32Nullable);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Int32_Nullable
(((($source.ParentUser).ParentUser)
.ParentUser).Int32_Nullable);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Int32NullableToInt32
(((($source.ParentUser).ParentUser)
.ParentUser).Int32NullableToInt32);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_DateTime
(((($source.ParentUser).ParentUser)
.ParentUser).DateTime);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_DateTimeNullable
(((($source.ParentUser).ParentUser)
.ParentUser).DateTimeNullable);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Decimal
(((($source.ParentUser).ParentUser)
.ParentUser).Decimal);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_DecimalNullable
(((($source.ParentUser).ParentUser)
.ParentUser).DecimalNullable);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_DayOfWeek
(((($source.ParentUser).ParentUser)
.ParentUser).DayOfWeek);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_DayOfWeekNullable
(((($source.ParentUser).ParentUser)
.ParentUser).DayOfWeekNullable);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Guid
(((($source.ParentUser).ParentUser)
.ParentUser).Guid);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_GuidNullable
(((($source.ParentUser).ParentUser)
.ParentUser).GuidNullable);
.If (((($source.ParentUser).ParentUser)
.ParentUser).MapPoint == null) {
.Call ((($target.ParentUser)
.ParentUser).ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If (((($target.ParentUser).ParentUser)
.ParentUser).MapPoint == null) {
((($target.ParentUser).ParentUser)
.ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call (((($target.ParentUser).ParentUser)
.ParentUser).MapPoint).set_Longitude
((((($source.ParentUser).ParentUser)
.ParentUser).MapPoint).Longitude)
;
.Call (((($target.ParentUser).ParentUser)
.ParentUser).MapPoint).set_Latitude
((((($source.ParentUser).ParentUser)
.ParentUser).MapPoint).Latitude)
}
};
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_VectorToNullable
(((($source.ParentUser).ParentUser)
.ParentUser).VectorToNullable);
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Vector2
(((($source.ParentUser).ParentUser)
.ParentUser).Vector2);
.If (((($source.ParentUser).ParentUser)
.ParentUser).ParentUser == null) {
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser == null) {
((($target.ParentUser).ParentUser)
.ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Value
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Value);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Name
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Name);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Int32
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Int32);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Int32Nullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Int32Nullable);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Int32_Nullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Int32_Nullable);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Int32NullableToInt32
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser)
.Int32NullableToInt32);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_DateTime
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).DateTime);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_DateTimeNullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).DateTimeNullable);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Decimal
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Decimal);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_DecimalNullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).DecimalNullable);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_DayOfWeek
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).DayOfWeek);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_DayOfWeekNullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).DayOfWeekNullable);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Guid
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Guid);
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_GuidNullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).GuidNullable);
.If ((((($source.ParentUser)
.ParentUser).ParentUser)
.ParentUser).MapPoint == null) {
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If ((((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).MapPoint == null) {
(((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
}
}
};
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_VectorToNullable
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).VectorToNullable)
;
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Vector2
((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Vector2)
;
.If ((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).ParentUser == null) {
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If ((((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).ParentUser == null) {
(((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
}
}
};
.If ((((($source.ParentUser).ParentUser)
.ParentUser).ParentUser).Dictionary == null) {
.Call (((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Dictionary
(.Default(System.Collections.Generic
.Dictionary`2[System.String,System.String]))
} .Else {
.Block() {
.If ((((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).Dictionary == null) {
(((($target.ParentUser).ParentUser)
.ParentUser).ParentUser).Dictionary =
.New System.Collections.Generic
.Dictionary`2[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If (((($source.ParentUser).ParentUser)
.ParentUser).Dictionary == null) {
.Call ((($target.ParentUser).ParentUser)
.ParentUser).set_Dictionary
(.Default(System.Collections.Generic.
Dictionary`2[System.String,System.String]))
} .Else {
.Block() {
.If (((($target.ParentUser).ParentUser)
.ParentUser).Dictionary == null) {
((($target.ParentUser).ParentUser)
.ParentUser).Dictionary =
.New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If ((($source.ParentUser).ParentUser).Dictionary == null) {
.Call (($target.ParentUser).ParentUser).set_Dictionary
(.Default(System.Collections.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If ((($target.ParentUser).ParentUser).Dictionary == null) {
(($target.ParentUser).ParentUser).Dictionary =
.New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If (($source.ParentUser).Dictionary == null) {
.Call ($target.ParentUser).set_Dictionary
(.Default(System.Collections.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If (($target.ParentUser).Dictionary == null) {
($target.ParentUser).Dictionary =
.New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If ($source.Dictionary == null) {
.Call $target.set_Dictionary(.Default
(System.Collections.Generic.Dictionary`2[System.String,System.String]))
} .Else {
.Block() {
.If ($target.Dictionary == null) {
$target.Dictionary = .New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
};
.If ($target.Users == null) {
.Call $target.set_Users(.New System.Collections.Generic.List`1
[HigLabo.Mapper.Test.User]())
} .Else {
.Default(System.Void)
};
.Block(
HigLabo.Mapper.Test.User $sourceElement,
HigLabo.Mapper.Test.User $targetElement,
System.Int32 $i) {
$i;
.If ($source.Users == null) {
.Return end { }
} .Else {
.Default(System.Void)
};
$i = 0;
.Loop {
.Block() {
.If (($source.Users).Count <= $i) {
.Break endLoop { }
} .Else {
.Default(System.Void)
};
$sourceElement = ($source.Users).Item[$i];
$targetElement = .New HigLabo.Mapper.Test.User();
.Call $targetElement.set_Value($sourceElement.Value);
.Call $targetElement.set_Name($sourceElement.Name);
.Call $targetElement.set_Int32($sourceElement.Int32);
.Call $targetElement.set_Int32Nullable($sourceElement.Int32Nullable);
.Call $targetElement.set_Int32_Nullable($sourceElement.Int32_Nullable);
.Call $targetElement.set_Int32NullableToInt32
($sourceElement.Int32NullableToInt32);
.Call $targetElement.set_DateTime($sourceElement.DateTime);
.Call $targetElement.set_DateTimeNullable
($sourceElement.DateTimeNullable);
.Call $targetElement.set_Decimal($sourceElement.Decimal);
.Call $targetElement.set_DecimalNullable
($sourceElement.DecimalNullable);
.Call $targetElement.set_DayOfWeek($sourceElement.DayOfWeek);
.Call $targetElement.set_DayOfWeekNullable
($sourceElement.DayOfWeekNullable);
.Call $targetElement.set_Guid($sourceElement.Guid);
.Call $targetElement.set_GuidNullable($sourceElement.GuidNullable);
.If ($sourceElement.MapPoint == null) {
.Call $targetElement.set_MapPoint(.Default
(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If ($targetElement.MapPoint == null) {
$targetElement.MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call ($targetElement.MapPoint).set_Longitude
(($sourceElement.MapPoint).Longitude);
.Call ($targetElement.MapPoint).set_Latitude
(($sourceElement.MapPoint).Latitude)
}
};
.Call $targetElement.set_VectorToNullabl
e($sourceElement.VectorToNullable);
.Call $targetElement.set_Vector2($sourceElement.Vector2);
.If ($sourceElement.ParentUser == null) {
.Call $targetElement.set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If ($targetElement.ParentUser == null) {
$targetElement.ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call ($targetElement.ParentUser).set_Value
(($sourceElement.ParentUser).Value);
.Call ($targetElement.ParentUser).set_Name
(($sourceElement.ParentUser).Name);
.Call ($targetElement.ParentUser).set_Int32
(($sourceElement.ParentUser).Int32);
.Call ($targetElement.ParentUser).set_Int32Nullable
(($sourceElement.ParentUser).Int32Nullable);
.Call ($targetElement.ParentUser).set_Int32_Nullable
(($sourceElement.ParentUser).Int32_Nullable);
.Call ($targetElement.ParentUser).set_Int32NullableToInt32
(($sourceElement.ParentUser).Int32NullableToInt32);
.Call ($targetElement.ParentUser).set_DateTime
(($sourceElement.ParentUser).DateTime);
.Call ($targetElement.ParentUser).set_DateTimeNullable
(($sourceElement.ParentUser).DateTimeNullable);
.Call ($targetElement.ParentUser).set_Decimal
(($sourceElement.ParentUser).Decimal);
.Call ($targetElement.ParentUser).set_DecimalNullable
(($sourceElement.ParentUser).DecimalNullable);
.Call ($targetElement.ParentUser).set_DayOfWeek
(($sourceElement.ParentUser).DayOfWeek);
.Call ($targetElement.ParentUser).set_DayOfWeekNullable
(($sourceElement.ParentUser).DayOfWeekNullable);
.Call ($targetElement.ParentUser).set_Guid
(($sourceElement.ParentUser).Guid);
.Call ($targetElement.ParentUser).set_GuidNullable
(($sourceElement.ParentUser).GuidNullable);
.If (($sourceElement.ParentUser).MapPoint == null) {
.Call ($targetElement.ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If (($targetElement.ParentUser).MapPoint == null) {
($targetElement.ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call (($targetElement.ParentUser).MapPoint).set_Longitude
((($sourceElement.ParentUser).MapPoint).Longitude);
.Call (($targetElement.ParentUser).MapPoint).set_Latitude
((($sourceElement.ParentUser).MapPoint).Latitude)
}
};
.Call ($targetElement.ParentUser).set_VectorToNullable
(($sourceElement.ParentUser).VectorToNullable);
.Call ($targetElement.ParentUser).set_Vector2
(($sourceElement.ParentUser).Vector2);
.If (($sourceElement.ParentUser).ParentUser == null) {
.Call ($targetElement.ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If (($targetElement.ParentUser).ParentUser == null) {
($targetElement.ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call (($targetElement.ParentUser)
.ParentUser).set_Value
((($sourceElement.ParentUser)
.ParentUser).Value);
.Call (($targetElement.ParentUser)
.ParentUser).set_Name
((($sourceElement.ParentUser)
.ParentUser).Name);
.Call (($targetElement.ParentUser)
.ParentUser).set_Int32
((($sourceElement.ParentUser)
.ParentUser).Int32);
.Call (($targetElement.ParentUser)
.ParentUser).set_Int32Nullable
((($sourceElement.ParentUser)
.ParentUser).Int32Nullable);
.Call (($targetElement.ParentUser)
.ParentUser).set_Int32_Nullable
((($sourceElement.ParentUser)
.ParentUser).Int32_Nullable);
.Call (($targetElement.ParentUser)
.ParentUser).set_Int32NullableToInt32
((($sourceElement.ParentUser)
.ParentUser).Int32NullableToInt32);
.Call (($targetElement.ParentUser)
.ParentUser).set_DateTime
((($sourceElement.ParentUser)
.ParentUser).DateTime);
.Call (($targetElement.ParentUser)
.ParentUser).set_DateTimeNullable
((($sourceElement.ParentUser)
.ParentUser).DateTimeNullable);
.Call (($targetElement.ParentUser)
.ParentUser).set_Decimal
((($sourceElement.ParentUser)
.ParentUser).Decimal);
.Call (($targetElement.ParentUser)
.ParentUser).set_DecimalNullable
((($sourceElement.ParentUser)
.ParentUser).DecimalNullable);
.Call (($targetElement.ParentUser)
.ParentUser).set_DayOfWeek
((($sourceElement.ParentUser)
.ParentUser).DayOfWeek);
.Call (($targetElement.ParentUser)
.ParentUser).set_DayOfWeekNullable
((($sourceElement.ParentUser)
.ParentUser).DayOfWeekNullable);
.Call (($targetElement.ParentUser)
.ParentUser).set_Guid
((($sourceElement.ParentUser)
.ParentUser).Guid);
.Call (($targetElement.ParentUser)
.ParentUser).set_GuidNullable
((($sourceElement.ParentUser)
.ParentUser).GuidNullable);
.If ((($sourceElement.ParentUser)
.ParentUser).MapPoint == null) {
.Call (($targetElement.ParentUser)
.ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If ((($targetElement.ParentUser)
.ParentUser).MapPoint == null) {
(($targetElement.ParentUser)
.ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call ((($targetElement.ParentUser)
.ParentUser).MapPoint).set_Longitude
(((($sourceElement.ParentUser)
.ParentUser).MapPoint).Longitude);
.Call ((($targetElement.ParentUser)
.ParentUser).MapPoint).set_Latitude
(((($sourceElement.ParentUser)
.ParentUser).MapPoint).Latitude)
}
};
.Call (($targetElement.ParentUser)
.ParentUser).set_VectorToNullable
((($sourceElement.ParentUser)
.ParentUser).VectorToNullable);
.Call (($targetElement.ParentUser)
.ParentUser).set_Vector2
((($sourceElement.ParentUser)
.ParentUser).Vector2);
.If ((($sourceElement.ParentUser)
.ParentUser).ParentUser == null) {
.Call (($targetElement.ParentUser).ParentUser)
.set_ParentUser(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If ((($targetElement.ParentUser).ParentUser)
.ParentUser == null) {
(($targetElement.ParentUser).ParentUser)
.ParentUser = .New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Value
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Value);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Name
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Name);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Int32
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Int32);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Int32Nullable
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Int32Nullable);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Int32_Nullable
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Int32_Nullable);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser)
.set_Int32NullableToInt32
(((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.Int32NullableToInt32);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_DateTime
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).DateTime);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_DateTimeNullable
(((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.DateTimeNullable);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Decimal
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Decimal);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_DecimalNullable
(((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.DecimalNullable);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_DayOfWeek
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).DayOfWeek);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_DayOfWeekNullable
(((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.DayOfWeekNullable);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_Guid
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).Guid);
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_GuidNullable
(((($sourceElement.ParentUser)
.ParentUser).ParentUser).GuidNullable);
.If (((($sourceElement.ParentUser)
.ParentUser).ParentUser).MapPoint == null) {
.Call ((($targetElement.ParentUser)
.ParentUser).ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If (((($targetElement.ParentUser)
.ParentUser).ParentUser).MapPoint == null) {
((($targetElement.ParentUser)
.ParentUser).ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
};
.Call (((($targetElement.ParentUser)
.ParentUser).ParentUser)
.MapPoint).set_Longitude
((((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.MapPoint).Longitude);
.Call (((($targetElement.ParentUser)
.ParentUser).ParentUser)
.MapPoint).set_Latitude
((((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.MapPoint).Latitude)
}
};
.Call ((($targetElement.ParentUser).ParentUser)
.ParentUser).set_VectorToNullable
(((($sourceElement.ParentUser).ParentUser)
.ParentUser).VectorToNullable);
.Call ((($targetElement.ParentUser).ParentUser)
.ParentUser).set_Vector2
(((($sourceElement.ParentUser).ParentUser)
.ParentUser).Vector2);
.If (((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser == null) {
.Call ((($targetElement.ParentUser).ParentUser)
.ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If (((($targetElement.ParentUser)
.ParentUser).ParentUser).ParentUser == null) {
((($targetElement.ParentUser)
.ParentUser).ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
};
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Value
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).Value);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Name
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).Name);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Int32
((((($sourceElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).Int32);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Int32Nullable
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).Int32Nullable);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Int32_Nullable
((((($sourceElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).Int32_Nullable);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser)
.set_Int32NullableToInt32
((((($sourceElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser)
.Int32NullableToInt32);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_DateTime
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).DateTime);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_DateTimeNullable
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).DateTimeNullable);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Decimal
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).Decimal);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_DecimalNullable
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).DecimalNullable);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_DayOfWeek
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).DayOfWeek);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_DayOfWeekNullable
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).DayOfWeekNullable);
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Guid
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).Guid);
.Call (((($targetElement.ParentUser).ParentUser)
.ParentUser).ParentUser).set_GuidNullable
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).GuidNullable);
.If ((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).MapPoint == null) {
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_MapPoint
(.Default(HigLabo.Mapper.Test.MapPoint))
} .Else {
.Block() {
.If ((((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).MapPoint == null) {
(((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).MapPoint =
.New HigLabo.Mapper.Test.MapPoint()
} .Else {
.Default(System.Void)
}
}
};
.Call (((($targetElement.ParentUser).ParentUser)
.ParentUser).ParentUser).set_VectorToNullable
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).VectorToNullable);
.Call (((($targetElement.ParentUser).ParentUser)
.ParentUser).ParentUser).set_Vector2
((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).Vector2);
.If ((((($sourceElement.ParentUser).ParentUser)
.ParentUser).ParentUser).ParentUser == null) {
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_ParentUser
(.Default(HigLabo.Mapper.Test.User))
} .Else {
.Block() {
.If ((((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).ParentUser == null) {
(((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).ParentUser =
.New HigLabo.Mapper.Test.User()
} .Else {
.Default(System.Void)
}
}
};
.If ((((($sourceElement.ParentUser)
.ParentUser).ParentUser)
.ParentUser).Dictionary == null) {
.Call (((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).set_Dictionary
(.Default(System.Collections
.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If ((((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).Dictionary == null) {
(((($targetElement.ParentUser)
.ParentUser)
.ParentUser).ParentUser).Dictionary =
.New System.Collections
.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If (((($sourceElement.ParentUser).ParentUser)
.ParentUser).Dictionary == null) {
.Call ((($targetElement.ParentUser).ParentUser)
.ParentUser).set_Dictionary(.Default
(System.Collections.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If (((($targetElement.ParentUser)
.ParentUser).ParentUser)
.Dictionary == null) {
((($targetElement.ParentUser).ParentUser)
.ParentUser).Dictionary =
.New System.Collections.Generic
.Dictionary`2[System.String,
System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If ((($sourceElement.ParentUser).ParentUser)
.Dictionary == null) {
.Call (($targetElement.ParentUser).ParentUser)
.set_Dictionary(.Default
(System.Collections.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If ((($targetElement.ParentUser).ParentUser)
.Dictionary == null) {
(($targetElement.ParentUser).ParentUser)
.Dictionary =
.New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If (($sourceElement.ParentUser).Dictionary == null) {
.Call ($targetElement.ParentUser).set_Dictionary
(.Default(System.Collections.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If (($targetElement.ParentUser).Dictionary == null) {
($targetElement.ParentUser).Dictionary =
.New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
}
}
};
.If ($sourceElement.Dictionary == null) {
.Call $targetElement.set_Dictionary(.Default
(System.Collections.Generic.Dictionary`2
[System.String,System.String]))
} .Else {
.Block() {
.If ($targetElement.Dictionary == null) {
$targetElement.Dictionary =
.New System.Collections.Generic.Dictionary`2
[System.String,System.String]()
} .Else {
.Default(System.Void)
}
}
};
.Call ($target.Users).Add($targetElement);
$i += 1
}
}
.LabelTarget endLoop:;
.Label
.LabelTarget end:
};
.Block(
System.Guid $sourceElement,
System.Guid $targetElement,
System.Int32 $i) {
$i;
.If ($source.GuidList == null) {
.Return end { }
} .Else {
.Default(System.Void)
};
$i = 0;
.Loop {
.Block() {
.If (($source.GuidList).Count <= $i) {
.Break endLoop { }
} .Else {
.Default(System.Void)
};
$sourceElement = ($source.GuidList).Item[$i];
$targetElement = (System.Guid)$sourceElement;
.Call ($target.GuidList).Add($targetElement);
$i += 1
}
}
.LabelTarget endLoop:;
.Label
.LabelTarget end:
};
.If ($source.Tags != null) {
.Block(
System.String $sourceElement,
System.String $targetElement,
System.Int32 $i,
System.String[] $arrayMember) {
$i;
$i = 0;
$arrayMember;
$arrayMember = .NewArray System.String[($source.Tags).Length];
.Loop {
.Block() {
.If (($source.Tags).Length <= $i) {
.Break endLoop { }
} .Else {
.Default(System.Void)
};
$sourceElement = ($source.Tags)[$i];
$targetElement = $sourceElement;
$arrayMember[$i] = $targetElement;
$i += 1
}
}
.LabelTarget endLoop:;
$target.Tags = $arrayMember
}
} .Else {
.Default(System.Void)
};
.If ($source.Timestamp != null) {
.Block(
System.Byte $sourceElement,
System.Byte $targetElement,
System.Int32 $i,
System.Byte[] $arrayMember) {
$i;
$i = 0;
$arrayMember;
$arrayMember = .NewArray System.Byte[($source.Timestamp).Length];
.Loop {
.Block() {
.If (($source.Timestamp).Length <= $i) {
.Break endLoop { }
} .Else {
.Default(System.Void)
};
$sourceElement = ($source.Timestamp)[$i];
$targetElement = $sourceElement;
$arrayMember[$i] = $targetElement;
$i += 1
}
}
.LabelTarget endLoop:;
$target.Timestamp = $arrayMember
}
} .Else {
.Default(System.Void)
};
$target
}
}
这些块将被编译为Func<Object, Object, TTarget>
的Lambda函数。
并保存到private _MapActionList
字段。当然,此编译过程仅在第一次时进行,然后重用保存在_MapActionList
中的Func
。AddPostAction
将此Func
和您的Lambda结合起来,ReplaceMap
将替换此Func
。
摘要
我希望这个库能帮助某人的工作,并让他们更容易专注于自己的产品。
历史
- 2020年8月1日:初次发布
- 2020年8月18日:
HigLabo.Mapper
(版本3.0.0.7)发布 - 2021年12月29日:
HigLabo.Mapper
(版本6.1.0.0)发布