在为构造函数创建命名参数时,我遇到了一个问题,其中只有我可以使用的构造函数要求refOrOutKeyword SyntaxToken。不允许传递null,而且Syntax.ParseToken("")失败。 Syntax.Token(SyntaxKind.RefKeyword)Syntax.Token(SyntaxKind.OutKeyword)都不适合,因为它们插入refout

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


我没有找到任何合适的文档来说明如何创建命名参数。

最佳答案

通常,查看此类代码在运行时如何表示会有帮助。如果我解析使用命名参数的代码并查看有问题的RefOrOutKeyword.KindArgumentSyntax,则为None。因此,您需要执行相同的操作:创建一个SyntaxToken,其中None作为其Kind

Syntax.Token(SyntaxKind.None)

关于c# - 如何在Roslyn中为方法创建没有ref或out的命名参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12750722/

10-09 08:40