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);
        }