-
Notifications
You must be signed in to change notification settings - Fork 35
T_CodeJam_Mapping_Map
Andrew Koryavchenko edited this page Jun 17, 2018
·
9 revisions
Mapper helper class.
System.Object
CodeJam.Mapping.Map
Namespace: CodeJam.Mapping
Assembly: CodeJam.Blocks (in CodeJam.Blocks.dll) Version: 2.0.0.0
C#
public static class Map
VB
<ExtensionAttribute>
Public NotInheritable Class Map
F#
[<AbstractClassAttribute>]
[<SealedAttribute>]
[<ExtensionAttribute>]
type Map = class end
The Map type exposes the following members.
Name | Description | |
---|---|---|
DeepCopy(T) | Performs deep copy. | |
GetMapper(TFrom, TTo)() | Returns a mapper to map an object of TFrom type to an object of TTo type. | |
GetMapper(TFrom, TTo)(Func(MapperBuilder(TFrom, TTo), MapperBuilder(TFrom, TTo))) | Returns a mapper to map an object of TFrom type to an object of TTo type. |
This example shows how to map one object to another.
C#
[TestFixture]
public class MapTests
{
private class Class1
{
public int Prop1 { get; set; }
public string Field1;
}
private class Class2
{
public string Prop1 { get; set; }
public DateTime? Field1;
}
private static readonly Mapper<Class1, Class2> _class1ToClass2Mapper =
Map.GetMapper<Class1, Class2>();
[Test]
public void Test1()
{
// Create new Class2 and map Class1 to it.
//
var c2 = _class1ToClass2Mapper.Map(
new Class1
{
Prop1 = 41,
Field1 = "2016-01-01"
});
Assert.That(c2.Prop1, Is.EqualTo("41"));
Assert.That(c2.Field1?.Year, Is.EqualTo(2016));
var expr = _class1ToClass2Mapper.GetMapperExpressionEx();
Assert.That(
expr.GetDebugView().Remove(" ", "\t", "\r", "\n", "CodeJam.Mapping.Examples.MapTests+"),
Is.EqualTo(@"
.Lambda #Lambda1<System.Func`2[Class1,Class2]>(Class1 $from)
{
.New Class2()
{
Prop1 = .Call ($from.Prop1).ToString(),
Field1 = .If ($from.Field1 != null)
{
(System.Nullable`1[System.DateTime]).Call System.DateTime.Parse(
$from.Field1,
null,
.Constant<System.Globalization.DateTimeStyles>(NoCurrentDateDefault))
} .Else {
null
}
}
}".Remove(" ", "\t", "\r", "\n")));
}
[Test]
public void Test2()
{
var c2 = new Class2();
// Map Class1 to existing Class2.
//
_class1ToClass2Mapper.Map(
new Class1
{
Prop1 = 41,
Field1 = "2016-01-01"
}, c2);
Assert.That(c2.Prop1, Is.EqualTo("41"));
Assert.That(c2.Field1?.Year, Is.EqualTo(2016));
var expr = _class1ToClass2Mapper.GetMapperExpression();
Assert.That(
expr.GetDebugView().Remove(" ", "\t", "\r", "\n", "CodeJam.Mapping.Examples.MapTests+"),
Is.EqualTo(@"
.Lambda #Lambda1<System.Func`4[
Class1,
Class2,
System.Collections.Generic.IDictionary`2[System.Object,System.Object],
Class2]>
(
Class1 $from,
Class2 $to,
System.Collections.Generic.IDictionary`2[System.Object,System.Object] $dic1
)
{
.Block(System.Collections.Generic.IDictionary`2[System.Object,System.Object] $ldic2)
{
$ldic2 = $dic1;
(Class2)(.Call CodeJam.Mapping.ExpressionBuilder.GetValue($ldic2,$from)
??
.Block(Class2 $obj3)
{
$obj3 = .If ($to == null) { .New Class2() } .Else { $to };
.Call CodeJam.Mapping.ExpressionBuilder.Add($ldic2, $from, $obj3);
$obj3.Prop1 = .Call ($from.Prop1).ToString();
$obj3.Field1 = .If ($from.Field1 != null)
{
(System.Nullable`1[System.DateTime]).Call System.DateTime.Parse(
$from.Field1,
null,
.Constant<System.Globalization.DateTimeStyles>(NoCurrentDateDefault))
}
.Else
{
null
};
$obj3
})
}
}".Remove(" ", "\t", "\r", "\n")));
}
}