c# - System.InvalidOperationException:“指定的项目不是列表的元素。”
问题描述
如何修复此代码?我有一个例外。此异常是 System.InvalidOperationException:'指定的项目不是列表的元素。'
using System;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var tree = SyntaxFactory.ParseExpression("(x + y) * z").SyntaxTree;
var root = (BinaryExpressionSyntax)tree.GetRoot();
foreach (var i in root.DescendantNodes())
{
if (i.Kind() == SyntaxKind.IdentifierName)
{
string str = "64";
var subTree = SyntaxFactory.ParseExpression(str).SyntaxTree;
var subRoot = (LiteralExpressionSyntax)subTree.GetRoot();
var subNode = subRoot.DescendantNodes().OfType<LiteralExpressionSyntax>();
var newRoot = root.ReplaceNode(root.FindNode(i.Span), subNode);
Console.WriteLine(newRoot);
}
}
Console.ReadLine();
}
}
}
解决方案
我这样解决这个问题
using System;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var tree = SyntaxFactory.ParseExpression("(x + y) * z").SyntaxTree;
var root = (BinaryExpressionSyntax)tree.GetRoot();
foreach (var i in root.DescendantNodes())
{
if (i.Kind() == SyntaxKind.IdentifierName)
{
string str = "64";
var subTree = SyntaxFactory.ParseExpression(str).SyntaxTree;
var subRoot = (LiteralExpressionSyntax)subTree.GetRoot();
var newRoot = SyntaxNodeExtensions.ReplaceNode(root, i, subRoot);
Console.WriteLine(newRoot);
}
}
Console.ReadLine();
}
}
}
推荐阅读
- sql-server - 如何将查询结果分组在同一行中?
- excel - Excel:VBA程序比较两列并突出显示不同的单元格并更改相同单元格的值
- python - 请求表单 Recaptcha
- php - 尝试在 PHP 中回显表单数据时出现 500 错误
- reactjs - react-scroll 中的函数未定义错误
- django - Django 使用 javascript 提供静态 html 文件
- ruby-on-rails - 如果 before_action 属性设置失败,Rails 会提前返回
- python - Keras:预测一系列数字中的匹配项
- c# - 将 Task.WhenAll 与不断增长的任务列表一起使用
- javascript - 在 onClientLoad 事件中从 NotesDocument 加载 JavaScript