【发布时间】:2015-08-27 00:55:16
【问题描述】:
我正在编写一个带有提供程序的 Visual Studio 代码修复程序,它将在这种语句中插入 AsEnumerable 调用:
model.clients.Take(10).Select(c => new Client(c));
我能够检测到此类语句,但在 Select 方法之前插入 AsEnumerable 时遇到问题。这是我尝试过的:
var expressionSyntax = SyntaxFactory.ParseExpression(".AsEnumerable()");
var memberAccessExpressionSyntax = invocationExpr.Expression as MemberAccessExpressionSyntax;
var root = await document.GetSyntaxRootAsync(cancellationToken);
var newRoot = root.InsertNodesAfter(memberAccessExpressionSyntax.Expression, new[] {expressionSyntax});
return document.WithSyntaxRoot(newRoot);
但我明白了
"System.InvalidOperationException: 指定的项目不是 列表的元素。”
查看堆栈跟踪:https://gist.github.com/anonymous/02c41f232829163b25ae
调用InsertNodesAfter方法的正确方法是什么?
【问题讨论】:
-
堆栈跟踪是什么?
-
@SLaks 已添加到问题中。
-
InsertNodesAfter仅适用于列表中的节点。方法调用不是一个列表;你需要拼接一个新的调用表达式。 -
@SLaks:我该怎么做?
-
你想在哪里插入呼叫?