示例#1
0
        public static IEnumerable <SyntaxNode> CreateAssignmentStatements(
            this ISyntaxFactoryService factory,
            IList <IParameterSymbol> parameters,
            IDictionary <string, ISymbol> parameterToExistingFieldMap,
            IDictionary <string, string> parameterToNewFieldMap)
        {
            foreach (var parameter in parameters)
            {
                var refKind       = parameter.RefKind;
                var parameterType = parameter.Type;
                var parameterName = parameter.Name;

                if (refKind == RefKind.Out)
                {
                    // If it's an out param, then don't create a field for it.  Instead, assign
                    // assign the default value for that type (i.e. "default(...)") to it.
                    var assignExpression = factory.CreateAssignExpression(
                        factory.CreateIdentifierName(parameterName),
                        factory.CreateDefaultExpression(parameterType));
                    var statement = factory.CreateExpressionStatement(assignExpression);
                    yield return(statement);
                }
                else
                {
                    // For non-out parameters, create a field and assign the parameter to it.
                    // TODO: I'm not sure that's what we really want for ref parameters.
                    string fieldName;
                    if (TryGetValue(parameterToExistingFieldMap, parameterName, out fieldName) ||
                        TryGetValue(parameterToNewFieldMap, parameterName, out fieldName))
                    {
                        var assignExpression = factory.CreateAssignExpression(
                            factory.CreateMemberAccessExpression(
                                factory.CreateThisExpression(),
                                factory.CreateIdentifierName(fieldName)),
                            factory.CreateIdentifierName(parameterName));
                        var statement = factory.CreateExpressionStatement(assignExpression);
                        yield return(statement);
                    }
                }
            }
        }