private static IMethodSymbol TryGetLambdaDelegateConversion(LambdaExpressionSyntax lambda, SemanticModel model) { // Check if we are a lambda that is a method argument if (lambda == null || !(lambda.Parent is ArgumentSyntax)) { return(null); } var index = ((ArgumentListSyntax)lambda.Parent.Parent).Arguments.IndexOf((ArgumentSyntax)lambda.Parent); if (index == -1) { // Shouldn't happen return(null); } var targetMethod = lambda.FindParent <InvocationExpressionSyntax>(); if (targetMethod == null) { return(null); } var methodSymbol = model.GetSymbolInfo(targetMethod).Symbol as IMethodSymbol; if (methodSymbol == null) { return(null); } var parameter = methodSymbol.Parameters[index]; if (parameter.Type?.TypeKind != TypeKind.Delegate) { return(null); } return((parameter.Type as INamedTypeSymbol)?.DelegateInvokeMethod); }