无法在Roslyn中向SyntaxFactory.ArgumentList()添加参数

时间:2018-01-10 17:30:02

标签: c# roslyn

由于某种原因,我无法向ArgumentList语法节点添加任何内容。我试过以下例子。在所有这些情况下,都会创建一个有效的Argument节点,但是在Add()操作之后,argList.Arguments的计数仍为零。

var argList = SyntaxFactory.ArgumentList();
var tempMemAccess = SyntaxFactory.MemberAccessExpression(
    SyntaxKind.SimpleMemberAccessExpression,
    SyntaxFactory.IdentifierName(ids.First()),
    SyntaxFactory.IdentifierName(SomeName));

argList.Arguments.Add(SyntaxFactory.Argument(tempMemAccess));
// argList remains empty  
argList.Arguments.Add(
    SyntaxFactory.Argument(SyntaxFactory.IdentifierName(possibleColName)));
// argList remains empty
argList.Arguments.Add((ArgumentSyntax)base.VisitArgument(a));
// argList remains empty

2 个答案:

答案 0 :(得分:1)

ArgumentListSyntax是不可变的。

相反,您应该使用其成员函数来使用其他参数创建更新的实例:

argList = argList.AddArguments(SyntaxFactory.Argument(tempMemAccess));

答案 1 :(得分:0)

显然所有这些对象都是不可变的,所以每次我都必须将它们分配给一个新变量。 这就是我用过的东西:

var newArgs = new List<ArgumentSyntax>();
newArgs.Add((ArgumentSyntax)base.VisitArgument(a));
var argListSyntax = SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList<ArgumentSyntax>(newArgs));
var newInvocation = SyntaxFactory.InvocationExpression(SyntaxFactory.IdentifierName("func"), argListSyntax);
相关问题