在为构造函数创建命名参数时,我遇到了一个问题,即唯一可用的构造函数要求 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());
}
我也没有找到任何合适的文档来阐明如何创建命名参数。
最佳答案
通常,查看此类代码在运行时如何表示会有所帮助。如果我解析使用命名参数的代码并查看相关 ArgumentSyntax
的 RefOrOutKeyword.Kind
,它是 None
。因此,您需要做同样的事情:创建一个 SyntaxToken
并将 None
作为其 Kind
:
Syntax.Token(SyntaxKind.None)
关于c# - 如何在 Roslyn 中为方法创建没有 ref 或 out 的命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750722/