@@ -70,6 +70,18 @@ public override HashSet<Type> GetCustomTypes()
7070        } 
7171    } 
7272
73+     private  class  ClassWithIndexers 
74+     { 
75+         public  int  this [ int  i1 ] 
76+         { 
77+             get  =>  i1  +  1 ; 
78+         } 
79+         public  string  this [ int  i1 ,  string  i2 ] 
80+         { 
81+             get  =>  i1  +  "-"  +  i2 ; 
82+         } 
83+     } 
84+     
7385    private  class  ComplexParseLambda1Result 
7486    { 
7587        public  int ?  Age ; 
@@ -660,6 +672,79 @@ public void DynamicExpressionParser_ParseLambda_Issue58()
660672        Check . That ( result ) . Equals ( 42 ) ; 
661673    } 
662674
675+     [ Fact ] 
676+     public  void  DynamicExpressionParser_ParseLambda_Indexer1D ( ) 
677+     { 
678+         // Arrange 
679+         var  customTypeProvider  =  new  Mock < IDynamicLinqCustomTypeProvider > ( ) ; 
680+         customTypeProvider . Setup ( c =>  c . GetCustomTypes ( ) ) . Returns ( [ typeof ( ClassWithIndexers ) ] ) ; 
681+         var  config  =  new  ParsingConfig 
682+         { 
683+             CustomTypeProvider  =  customTypeProvider . Object 
684+         } ; 
685+         var  expressionParams  =  new [ ] 
686+         { 
687+             Expression . Parameter ( typeof ( ClassWithIndexers ) ,  "myObj" ) 
688+         } ; 
689+ 
690+         var  myClassInstance  =  new  ClassWithIndexers ( ) ; 
691+         var  invokersMerge  =  new  List < object >  {  myClassInstance  } ; 
692+ 
693+         // Act 
694+         var  expression  =  DynamicExpressionParser . ParseLambda ( config ,  false ,  expressionParams ,  null ,  "myObj[3]" ) ; 
695+         var  del  =  expression . Compile ( ) ; 
696+         var  result  =  del . DynamicInvoke ( invokersMerge . ToArray ( ) ) ; 
697+ 
698+         // Assert 
699+         Check . That ( result ) . Equals ( 4 ) ; 
700+     } 
701+     
702+     [ Fact ] 
703+     public  void  DynamicExpressionParser_ParseLambda_Indexer2D ( ) 
704+     { 
705+         // Arrange 
706+         var  customTypeProvider  =  new  Mock < IDynamicLinqCustomTypeProvider > ( ) ; 
707+         customTypeProvider . Setup ( c =>  c . GetCustomTypes ( ) ) . Returns ( [ typeof ( ClassWithIndexers ) ] ) ; 
708+         var  config  =  new  ParsingConfig 
709+         { 
710+             CustomTypeProvider  =  customTypeProvider . Object 
711+         } ; 
712+         var  expressionParams  =  new [ ] 
713+         { 
714+             Expression . Parameter ( typeof ( ClassWithIndexers ) ,  "myObj" ) 
715+         } ; 
716+ 
717+         var  myClassInstance  =  new  ClassWithIndexers ( ) ; 
718+         var  invokersMerge  =  new  List < object >  {  myClassInstance  } ; 
719+ 
720+         // Act 
721+         var  expression  =  DynamicExpressionParser . ParseLambda ( config ,  false ,  expressionParams ,  null ,  "myObj[3,\" 1\" ]" ) ; 
722+         var  del  =  expression . Compile ( ) ; 
723+         var  result  =  del . DynamicInvoke ( invokersMerge . ToArray ( ) ) ; 
724+ 
725+         // Assert 
726+         Check . That ( result ) . Equals ( "3-1" ) ; 
727+     } 
728+     
729+     [ Fact ] 
730+     public  void  DynamicExpressionParser_ParseLambda_IndexerParameterMismatch ( ) 
731+     { 
732+         // Arrange 
733+         var  customTypeProvider  =  new  Mock < IDynamicLinqCustomTypeProvider > ( ) ; 
734+         customTypeProvider . Setup ( c =>  c . GetCustomTypes ( ) ) . Returns ( [ typeof ( ClassWithIndexers ) ] ) ; 
735+         var  config  =  new  ParsingConfig 
736+         { 
737+             CustomTypeProvider  =  customTypeProvider . Object 
738+         } ; 
739+         var  expressionParams  =  new [ ] 
740+         { 
741+             Expression . Parameter ( typeof ( ClassWithIndexers ) ,  "myObj" ) 
742+         } ; 
743+         
744+         Assert . Throws < ParseException > ( ( )  => 
745+             DynamicExpressionParser . ParseLambda ( config ,  false ,  expressionParams ,  null ,  "myObj[3,\" 1\" ,1]" ) ) ; 
746+     } 
747+ 
663748    [ Fact ] 
664749    public  void  DynamicExpressionParser_ParseLambda_DuplicateParameterNames_ThrowsException ( ) 
665750    { 
0 commit comments