使用 roslyn API 修改 C# 代码时 RemoveNodes 的问题

问题描述 投票:0回答:0

我的问题是当我调用删除节点,甚至删除节点时。我得到一个 ArgumentNullException。

我正在尝试创建一个删除“.Result”然后添加等待的代码修复。

我卡在删除 .Result 部分了

这是我的代码


private const string sampleCode =
    @"
using System.Threading.Tasks;

internal static class Class1
{
    public static int Wrong()
    {
        return Delay1().Result;
    }
    async static Task<int> Delay1() { await Task.Delay (1000); return 1; }
}
";
async Task Main()
{

    SyntaxTree tree = CSharpSyntaxTree.ParseText(sampleCode);
    var root = (CompilationUnitSyntax)tree.GetRoot();
    var node = root.DescendantNodesAndSelf().First(x => x is MemberAccessExpressionSyntax);


    foreach (var syntaxNode in node.ChildNodes())
    {
        if (syntaxNode is IdentifierNameSyntax identifierNameSyntax)
        {
            if (identifierNameSyntax.Identifier.Text == "Result")
            {
                nodesToRemove = new[] { previousNode, syntaxNode };
                break;
            }
        }
        previousNode = syntaxNode;
    }
    newNode = node.RemoveNodes(nodesToRemove, SyntaxRemoveOptions.KeepNoTrivia);
// throws exception on above line
}

如果上一个节点是第一个(即“.”)它抛出

值不能为空。 (参数“表达式”)

如果顺序是相反的

值不能为空。 (参数“名称”)

感谢任何帮助

c# roslyn roslyn-code-analysis
© www.soinside.com 2019 - 2024. All rights reserved.