C# CodeRefactoringProvider中带有ArgumentList的ObjectCreationExpression

C# CodeRefactoringProvider中带有ArgumentList的ObjectCreationExpression,c#,.net,roslyn,C#,.net,Roslyn,我正在尝试用.NET编译器平台(roslyn)实现代码重构。但是,由于某些原因,我无法使ObjectCreationExpression与ArgumentList一起工作。下面是我的方法(可以找到完整的代码): 专用aync任务AddGuardAsync(文档文档、参数语法参数、BaseMethodDeclarationSyntax方法声明、CancellationToken CancellationToken) { BinaryExpressionSyntax binaryExpression

我正在尝试用.NET编译器平台(roslyn)实现代码重构。但是,由于某些原因,我无法使ObjectCreationExpression与ArgumentList一起工作。下面是我的方法(可以找到完整的代码):

专用aync任务AddGuardAsync(文档文档、参数语法参数、BaseMethodDeclarationSyntax方法声明、CancellationToken CancellationToken)
{
BinaryExpressionSyntax binaryExpression=SyntaxFactory.binaryExpression(SyntaxKind.EqualExpression,
SyntaxFactory.IdentifierName(参数.Identifier),
LiteralExpression(SyntaxKind.NullLiteralExpression));
NameOfExpression语法名称OfExp=SyntaxFactory.NameOfExpression(
“姓名”,
ParseTypeName(parameter.Identifier.Text));
SeparatedSyntaxList argsList=新的SeparatedSyntaxList();
argsList.Add(SyntaxFactory.Argument(nameOfExp));
ObjectCreationExpressionSyntax objectCreationEx=SyntaxFactory.ObjectCreationExpression(
SyntaxFactory.ParseTypeName(nameof(ArgumentNullException)),
SyntaxFactory.ArgumentList(argsList),
无效);
ThrowStatementSyntax throwStatement=SyntaxFactory.throwStatement(objectCreationEx);
IfStatementSyntax ifStatement=SyntaxFactory
.IfStatement(SyntaxFactory.Token(SyntaxKind.IfKeyword)、SyntaxFactory.Token(SyntaxKind.OpenParenToken)、binaryExpression、SyntaxFactory.Token(SyntaxKind.CloseParenToken)、throwStatement、null)
.带有附加注释(格式化程序注释);
SyntaxNode root=wait document.GetSyntaxRootAsync(cancellationToken);
SyntaxNode newRoot=root.InsertNodesBefore(methodDeclaration.Body.ChildNodes().First(),new[]{ifStatement});
返回文档。使用syntaxroot(newRoot);
}
这奇怪地产生了以下代码修复建议,但没有
nameof
参数(即使没有花括号):

我在这里遗漏了什么?

SeparatedSyntaxList
是不可变的。
调用
.Add()
将返回一个添加了令牌的新列表

你忽略了这个新列表,所以你的令牌永远不会出现在任何地方

你想要

argsList = argsList.Add(SyntaxFactory.Argument(nameOfExp));

啊,谢谢!您还知道为什么if语句没有大括号吗?如果需要大括号,请将该语句括在SyntaxFactory.BlockStatement中。
argsList = argsList.Add(SyntaxFactory.Argument(nameOfExp));