c# - 如何在 Roslyn 中为方法创建没有 ref 或 out 的命名参数?

标签 c# roslyn

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

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

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

最佳答案

通常,查看此类代码在运行时如何表示会有所帮助。如果我解析使用命名参数的代码并查看相关 ArgumentSyntaxRefOrOutKeyword.Kind,它是 None。因此,您需要做同样的事情:创建一个 SyntaxToken 并将 None 作为其 Kind:

Syntax.Token(SyntaxKind.None)

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

相关文章:

c# - NHibernate,我应该使用 ReadCommitted 还是 ReadUncommited 事务隔离级别?

C# Roslyn 替换方法

c# - 在 OSX : "No assembly containing System.Object was found" 上使用 .NET Core 从代码调用 Roslyn

c# - CRM 创建 CrmConnection 的新实例

c# - 带有 PartyList 的 QueryExpression 中的错误

c# - 使用 .Net 编译器 Roslyn 为 C# 代码创建控制流图

c# - Roslyn CodeFix 找不到以前创建的 AdditionalDocument

c# - 罗斯林 If 语句

c# - 支持 HTTP 和 HTTPS Web.Config WCF 服务

c# - 如何反序列化 "ref"参数