我的问题是当我调用删除节点,甚至删除节点时。我得到一个 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
}
如果上一个节点是第一个(即“.”)它抛出
值不能为空。 (参数“表达式”)
如果顺序是相反的
值不能为空。 (参数“名称”)
感谢任何帮助