When creating a named argument for a constructor, I am running into a problem where the only constructors avaliable to me ask for a refOrOutKeyword SyntaxToken. Passing null is not allowed, moreover Syntax.ParseToken("") fails. Syntax.Token(SyntaxKind.RefKeyword) and Syntax.Token(SyntaxKind.OutKeyword) are both unsuitable, as they insert either ref or out:
var ctorArgs = Syntax.ArgumentList();
var ctor = enclosingType.Members
.OfType<ConstructorDeclarationSyntax>()
.OrderBy(cc => cc.ParameterList.Parameters.Count)
.FirstOrDefault();
if (ctor != null)
{
//
// Summary:
// Creates a new ArgumentSyntax instance.
// public static ArgumentSyntax Argument(
// NameColonSyntax nameColon,
// SyntaxToken refOrOutKeyword,
// ExpressionSyntax expression);
ctorArgs.AddArguments((
from param in ctor.ParameterList.Parameters
select Syntax.Argument(
Syntax.NameColon(param.Identifier.ValueText),
Syntax.ParseToken("") /* <- what to put here */,
Syntax.DefaultExpression(param.Type))
).ToArray());
}
I’ve not found any suitable documentation to elucidate how I can create named arguments either.
Usually, looking how is such code represented at runtime helps. If I parse code that uses named arguments and look at
RefOrOutKeyword.Kindof theArgumentSyntaxin question, it’sNone. So, you need to do the same thing: create aSyntaxTokenwithNoneas itsKind: