gpt4 book ai didi

c# - CodeRefactoringProvider 中带有 ArgumentList 的 ObjectCreationExpression

转载 作者:行者123 更新时间:2023-11-30 13:45:43 26 4
gpt4 key购买 nike

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

private aync Task<Document> AddGuardAsync(Document document, ParameterSyntax parameter, BaseMethodDeclarationSyntax methodDeclaration, CancellationToken cancellationToken)
{
BinaryExpressionSyntax binaryExpression = SyntaxFactory.BinaryExpression(SyntaxKind.EqualsExpression,
SyntaxFactory.IdentifierName(parameter.Identifier),
SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));

NameOfExpressionSyntax nameOfExp = SyntaxFactory.NameOfExpression(
"nameof",
SyntaxFactory.ParseTypeName(parameter.Identifier.Text));

SeparatedSyntaxList<ArgumentSyntax> argsList = new SeparatedSyntaxList<ArgumentSyntax>();
argsList.Add(SyntaxFactory.Argument(nameOfExp));

ObjectCreationExpressionSyntax objectCreationEx = SyntaxFactory.ObjectCreationExpression(
SyntaxFactory.ParseTypeName(nameof(ArgumentNullException)),
SyntaxFactory.ArgumentList(argsList),
null);

ThrowStatementSyntax throwStatement = SyntaxFactory.ThrowStatement(objectCreationEx);
IfStatementSyntax ifStatement = SyntaxFactory
.IfStatement(SyntaxFactory.Token(SyntaxKind.IfKeyword), SyntaxFactory.Token(SyntaxKind.OpenParenToken), binaryExpression, SyntaxFactory.Token(SyntaxKind.CloseParenToken), throwStatement, null)
.WithAdditionalAnnotations(Formatter.Annotation);

SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken);
SyntaxNode newRoot = root.InsertNodesBefore(methodDeclaration.Body.ChildNodes().First(), new[] { ifStatement });

return document.WithSyntaxRoot(newRoot);
}

在没有 nameof 参数(甚至没有大括号)的情况下,这奇怪地产生了以下代码修复建议:

enter image description here

我在这里缺少什么?

最佳答案

SeparatedSyntaxList<T>是不可变的。
打电话.Add()返回添加了您的 token 的新列表。

你忽略了那个新列表,所以你的 token 永远不会出现在任何地方。

你想要

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

关于c# - CodeRefactoringProvider 中带有 ArgumentList 的 ObjectCreationExpression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26964026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com