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