Represents an anonymous method or lambda expression. Note: the lambda has no type. To retrieve the delegate type, look at the anonymous function conversion.
Inheritance: ResolveResult
Esempio n. 1
0
 void MakeExplicitParameterTypeInference(LambdaResolveResult e, IType t)
 {
     // C# 4.0 spec: §7.5.2.7 Explicit parameter type inferences
     if (e.IsImplicitlyTyped || !e.HasParameterList)
         return;
     Log.WriteLine(" MakeExplicitParameterTypeInference from " + e + " to " + t);
     IMethod m = GetDelegateOrExpressionTreeSignature(t);
     if (m == null)
         return;
     for (int i = 0; i < e.Parameters.Count && i < m.Parameters.Count; i++) {
         MakeExactInference(e.Parameters[i].Type, m.Parameters[i].Type);
     }
 }
        static MethodDeclaration GetMethod(RefactoringContext context, LambdaResolveResult lambda, BlockStatement body,
			bool noReturnValue = false)
        {
            var method = new MethodDeclaration { Name = "Method" };

            if (noReturnValue) {
                method.ReturnType = new PrimitiveType ("void");
            } else {
                var type = lambda.GetInferredReturnType (lambda.Parameters.Select (p => p.Type).ToArray ());
                method.ReturnType = type.Name == "?" ? new PrimitiveType ("void") : context.CreateShortType (type);
            }

            foreach (var param in lambda.Parameters)
                method.Parameters.Add (new ParameterDeclaration (context.CreateShortType (param.Type), param.Name));

            method.Body = body;
            if (lambda.IsAsync)
                method.Modifiers |= Modifiers.Async;

            return method;
        }