protected override ParametersCompiled ResolveParameters(ResolveContext ec, TypeInferenceContext tic, TypeSpec delegateType) { if (!delegateType.IsDelegate) { return(null); } AParametersCollection d_params = Delegate.GetParameters(delegateType); if (HasExplicitParameters) { if (!VerifyExplicitParameters(ec, delegateType, d_params)) { return(null); } return(Parameters); } // // If L has an implicitly typed parameter list we make implicit parameters explicit // Set each parameter of L is given the type of the corresponding parameter in D // if (!VerifyParameterCompatibility(ec, delegateType, d_params, ec.IsInProbingMode)) { return(null); } TypeSpec [] ptypes = new TypeSpec [Parameters.Count]; for (int i = 0; i < d_params.Count; i++) { // D has no ref or out parameters if ((d_params.FixedParameters [i].ModFlags & Parameter.Modifier.ISBYREF) != 0) { return(null); } TypeSpec d_param = d_params.Types [i]; // // When type inference context exists try to apply inferred type arguments // if (tic != null) { d_param = tic.InflateGenericArgument(ec, d_param); } ptypes [i] = d_param; ImplicitLambdaParameter ilp = (ImplicitLambdaParameter)Parameters.FixedParameters [i]; ilp.SetParameterType(d_param); ilp.Resolve(null, i); } Parameters.Types = ptypes; return(Parameters); }