/// <summary>
        /// The generate dispatch block for method.
        /// </summary>
        /// <param name="methodDescription">
        /// The method description.
        /// </param>
        /// <param name="instance">
        /// The instance.
        /// </param>
        /// <param name="event">
        /// The event.
        /// </param>
        /// <returns>
        /// The <see cref="StatementSyntax"/>.
        /// </returns>
        private static StatementSyntax GenerateDispatchBlockForMethod(ActorMethodDescription methodDescription, IdentifierNameSyntax instance, IdentifierNameSyntax @event)
        {
            // Construct expressions to retrieve each of the method's parameters.
            var method           = methodDescription.MethodInfo;
            var parameters       = new List <ExpressionSyntax>();
            var methodParameters = method.GetParameters().ToList();

            for (var i = 0; i < methodParameters.Count; i++)
            {
                var parameter     = methodParameters[i];
                var parameterType = parameter.ParameterType.GetTypeSyntax();
                var indexArg      =
                    SF.Argument(
                        SF.LiteralExpression(SyntaxKind.NumericLiteralExpression, SF.Literal(i)));
                var getArg =
                    SF.InvocationExpression(@event.Member("Arg", parameterType)).AddArgumentListArguments(indexArg);
                parameters.Add(getArg);
            }

            var grainMethodCall =
                SF.InvocationExpression(instance.Member(method.Name))
                .AddArgumentListArguments(parameters.Select(SF.Argument).ToArray());

            return(SF.ReturnStatement(SF.InvocationExpression(grainMethodCall.Member("Box"))));
        }