private void ProcessAnonymousType(TypeDefinition anonymousTypeDefinition, GenericInstanceType anonymousInstanceType, MethodDefinition constructorDefinition, ExpressionCollection constructorArguments) { for (int i = 0; i < constructorDefinition.Parameters.Count; i++) { ParameterDefinition currentParameter = constructorDefinition.Parameters[i]; int genericParameterIndex = anonymousTypeDefinition.GenericParameters.IndexOf(currentParameter.ParameterType as GenericParameter); PropertyDefinition property = FindPropertyOfType(anonymousTypeDefinition, currentParameter.ParameterType); TypeReference propertyType = anonymousInstanceType.GenericArguments[genericParameterIndex]; if (anonymousInstanceType.PostionToArgument.ContainsKey(genericParameterIndex)) { propertyType = anonymousInstanceType.PostionToArgument[genericParameterIndex]; } Expression parameterExpression = new AnonymousPropertyInitializerExpression(property, propertyType); int argumentIndex = GetParameterIndexWithType(constructorDefinition, currentParameter.ParameterType); Expression argumentExpression = transformer.Visit(constructorArguments[argumentIndex].Clone()) as Expression; initializerExpressions.Expressions.Add( new BinaryExpression(BinaryOperator.Assign, parameterExpression, argumentExpression, this.typeSystem, null)); } }
private void ProcessAnonymousType(TypeDefinition anonymousTypeDefinition, GenericInstanceType anonymousInstanceType, MethodDefinition constructorDefinition, ExpressionCollection constructorArguments) { V_0 = 0; while (V_0 < constructorDefinition.get_Parameters().get_Count()) { V_1 = constructorDefinition.get_Parameters().get_Item(V_0); V_2 = anonymousTypeDefinition.get_GenericParameters().IndexOf(V_1.get_ParameterType() as GenericParameter); stackVariable19 = this.FindPropertyOfType(anonymousTypeDefinition, V_1.get_ParameterType()); V_3 = anonymousInstanceType.get_GenericArguments().get_Item(V_2); if (anonymousInstanceType.get_PostionToArgument().ContainsKey(V_2)) { V_3 = anonymousInstanceType.get_PostionToArgument().get_Item(V_2); } V_4 = new AnonymousPropertyInitializerExpression(stackVariable19, V_3); V_5 = this.GetParameterIndexWithType(constructorDefinition, V_1.get_ParameterType()); V_6 = this.transformer.Visit(constructorArguments.get_Item(V_5).Clone()) as Expression; this.initializerExpressions.get_Expressions().Add(new BinaryExpression(26, V_4, V_6, this.typeSystem, null, false)); V_0 = V_0 + 1; } return; }
public virtual void VisitAnonymousPropertyInitializerExpression(AnonymousPropertyInitializerExpression node) { }
public ICodeNode VisitAnonymousPropertyInitializerExpression(AnonymousPropertyInitializerExpression node) { return(node); }