12
12
using System . Linq . Expressions ;
13
13
#endif
14
14
using System . Reflection ;
15
- using Caching . Dictionaries ;
16
15
using Configuration ;
17
16
using Extensions ;
18
17
using Extensions . Internal ;
@@ -254,12 +253,6 @@ public static Member[] RelativeTo(this Member[] memberChain, Member[] otherMembe
254
253
255
254
private delegate Expression PopulationFactory ( Expression instance , Member member , Expression value ) ;
256
255
257
- private static readonly ISimpleDictionary < MemberType , PopulationFactory > _populationFactoriesByMemberType =
258
- new FixedSizeSimpleDictionary < MemberType , PopulationFactory > ( 3 )
259
- . Add ( MemberType . Field , AssignMember )
260
- . Add ( MemberType . Property , AssignMember )
261
- . Add ( MemberType . SetMethod , CallSetMethod ) ;
262
-
263
256
private static Expression AssignMember ( Expression instance , Member targetMember , Expression value )
264
257
=> targetMember . GetAccess ( instance ) . AssignTo ( value ) ;
265
258
@@ -270,12 +263,24 @@ private static Expression CallSetMethod(Expression instance, Member targetMember
270
263
271
264
public static Expression GetPopulation ( this Member targetMember , Expression instance , Expression value )
272
265
{
273
- var populationFactory = _populationFactoriesByMemberType [ targetMember . MemberType ] ;
266
+ var populationFactory = GetPopulationFactory ( targetMember ) ;
274
267
var population = populationFactory . Invoke ( instance , targetMember , value ) ;
275
268
276
269
return population ;
277
270
}
278
271
272
+ private static PopulationFactory GetPopulationFactory ( Member targetMember )
273
+ {
274
+ return targetMember . MemberType switch
275
+ {
276
+ MemberType . Field => AssignMember ,
277
+ MemberType . Property => AssignMember ,
278
+ MemberType . SetMethod => CallSetMethod ,
279
+ _ => throw new NotSupportedException (
280
+ "No PopulationFactory defined for MemberType" )
281
+ } ;
282
+ }
283
+
279
284
public static QualifiedMember ToSourceMemberOrNull (
280
285
this Expression memberAccess ,
281
286
MapperContext mapperContext )
@@ -323,7 +328,7 @@ public static QualifiedMember ToSourceMember(
323
328
nonMemberAction ?? ThrowIfUnsupported ,
324
329
mapperContext ) ;
325
330
}
326
-
331
+
327
332
#if NET35
328
333
public static QualifiedMember ToTargetMemberOrNull ( this LinqExp . LambdaExpression memberAccess , MapperContext mapperContext )
329
334
=> memberAccess . ToDlrExpression ( ) . ToTargetMemberOrNull ( mapperContext ) ;
0 commit comments