annotate Tools/CodeGenerator/ValueMapping.Declare.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Data.SqlTypes;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using KeyValue = System.Collections.Generic.KeyValuePair<System.Type, System.Type>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using Table = System.Collections.Generic.Dictionary<System.Collections.Generic.KeyValuePair<System.Type, System.Type>, BLToolkit.Mapping.IValueMapper>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 namespace BLToolkit.Mapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 public interface IMapDataSource
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 int Count { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 Type GetFieldType (int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 string GetName (int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 int GetOrdinal (string name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 object GetValue (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 object GetValue (object o, string name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 bool IsNull (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 bool SupportsTypedValues(int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 // Simple type getters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 SByte GetSByte (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 Int16 GetInt16 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 Int32 GetInt32 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 Int64 GetInt64 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 Byte GetByte (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 UInt16 GetUInt16 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 UInt32 GetUInt32 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 UInt64 GetUInt64 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 Boolean GetBoolean (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 Char GetChar (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 Single GetSingle (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 Double GetDouble (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 Decimal GetDecimal (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 DateTime GetDateTime (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 Guid GetGuid (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 #if FW2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 // Simple type getters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 SByte? GetNullableSByte (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 Int16? GetNullableInt16 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 Int32? GetNullableInt32 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 Int64? GetNullableInt64 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 Byte? GetNullableByte (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 UInt16? GetNullableUInt16 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 UInt32? GetNullableUInt32 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 UInt64? GetNullableUInt64 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 Boolean? GetNullableBoolean (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 Char? GetNullableChar (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 Single? GetNullableSingle (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 Double? GetNullableDouble (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 Decimal? GetNullableDecimal (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 DateTime? GetNullableDateTime(object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 Guid? GetNullableGuid (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 // SQL type getters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 SqlByte GetSqlByte (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 SqlInt16 GetSqlInt16 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 SqlInt32 GetSqlInt32 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 SqlInt64 GetSqlInt64 (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 SqlSingle GetSqlSingle (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 SqlBoolean GetSqlBoolean (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 SqlDouble GetSqlDouble (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 SqlDateTime GetSqlDateTime (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 SqlDecimal GetSqlDecimal (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 SqlMoney GetSqlMoney (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 SqlGuid GetSqlGuid (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 SqlString GetSqlString (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 public interface IMapDataDestination
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 Type GetFieldType (int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 int GetOrdinal (string name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 void SetValue (object o, int index, object value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 void SetValue (object o, string name, object value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 void SetNull (object o, int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 bool SupportsTypedValues(int index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 // Simple type setters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 void SetSByte (object o, int index, SByte value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 void SetInt16 (object o, int index, Int16 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 void SetInt32 (object o, int index, Int32 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 void SetInt64 (object o, int index, Int64 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 void SetByte (object o, int index, Byte value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 void SetUInt16 (object o, int index, UInt16 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 void SetUInt32 (object o, int index, UInt32 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 void SetUInt64 (object o, int index, UInt64 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 void SetBoolean (object o, int index, Boolean value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 void SetChar (object o, int index, Char value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 void SetSingle (object o, int index, Single value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 void SetDouble (object o, int index, Double value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 void SetDecimal (object o, int index, Decimal value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 void SetGuid (object o, int index, Guid value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 void SetDateTime (object o, int index, DateTime value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 #if FW2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 // Simple type setters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 void SetNullableSByte (object o, int index, SByte? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 void SetNullableInt16 (object o, int index, Int16? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 void SetNullableInt32 (object o, int index, Int32? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 void SetNullableInt64 (object o, int index, Int64? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 void SetNullableByte (object o, int index, Byte? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 void SetNullableUInt16 (object o, int index, UInt16? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 void SetNullableUInt32 (object o, int index, UInt32? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 void SetNullableUInt64 (object o, int index, UInt64? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 void SetNullableBoolean (object o, int index, Boolean? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 void SetNullableChar (object o, int index, Char? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 void SetNullableSingle (object o, int index, Single? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 void SetNullableDouble (object o, int index, Double? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 void SetNullableDecimal (object o, int index, Decimal? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 void SetNullableGuid (object o, int index, Guid? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 void SetNullableDateTime (object o, int index, DateTime? value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 // SQL type setters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 void SetSqlByte (object o, int index, SqlByte value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 void SetSqlInt16 (object o, int index, SqlInt16 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 void SetSqlInt32 (object o, int index, SqlInt32 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 void SetSqlInt64 (object o, int index, SqlInt64 value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 void SetSqlSingle (object o, int index, SqlSingle value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 void SetSqlBoolean (object o, int index, SqlBoolean value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 void SetSqlDouble (object o, int index, SqlDouble value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 void SetSqlDateTime(object o, int index, SqlDateTime value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 void SetSqlDecimal (object o, int index, SqlDecimal value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 void SetSqlMoney (object o, int index, SqlMoney value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 void SetSqlGuid (object o, int index, SqlGuid value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 void SetSqlString (object o, int index, SqlString value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 public interface IValueMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 void Map(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 IMapDataSource source, object sourceObject, int sourceIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 IMapDataDestination dest, object destObject, int destIndex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 public static partial class ValueMapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 #region Init
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 private static Table _mappers = new Table();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 private static void AddSameType(Type type, IValueMapper mapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 _mappers.Add(new KeyValue(type, type), mapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 #region Default Mapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 class DefaultValueMapper : IValueMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 public void Map(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 IMapDataSource source, object sourceObject, int sourceIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 IMapDataDestination dest, object destObject, int destIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 dest.SetValue(destObject, destIndex, source.GetValue(sourceObject, sourceIndex));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 //object o = source.GetValue(sourceObject, sourceIndex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 //if (o == null) dest.SetNull (destObject, destIndex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 //else dest.SetValue(destObject, destIndex, o);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 private static IValueMapper _defaultMapper = new DefaultValueMapper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 public static IValueMapper DefaultMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 get { return _defaultMapper; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 set { _defaultMapper = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 #region GetMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 private static object _sync = new object();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 public static IValueMapper GetMapper(Type t1, Type t2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 lock (_sync)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 if (t1 == null) t1 = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 if (t2 == null) t2 = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 if (t1.IsEnum) t1 = Enum.GetUnderlyingType(t1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 if (t2.IsEnum) t2 = Enum.GetUnderlyingType(t2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 KeyValue key = new KeyValue(t1, t2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 IValueMapper t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 #if FW2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 if (_mappers.TryGetValue(key, out t))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 return t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 t = (IValueMapper)_mappers[key];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 if (t != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 return t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 t = _defaultMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 _mappers.Add(key, t);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 return t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 }