C# 将列表项一起比较条件引发堆栈溢出异常

C# 将列表项一起比较条件引发堆栈溢出异常,c#,linq,C#,Linq,我有一个节点列表,每个节点都有对其上一个节点和下一个节点的引用。我想要一个不共享下一个或上一个节点的节点列表。换言之,未排序的节点列表 nodes= nodes.Where(o => !nodes.Any(oo => ReferenceEquals(oo.NextNode, o.PreviousNode))); 它抛出了这个异常 NodeLib.dll中发生类型为“System.StackOverflowException”的未处理异常 我不知道我错过了什么或误解了什么。提前谢谢

我有一个节点列表,每个节点都有对其上一个节点和下一个节点的引用。我想要一个不共享下一个或上一个节点的节点列表。换言之,未排序的节点列表

 nodes= nodes.Where(o => !nodes.Any(oo => ReferenceEquals(oo.NextNode, o.PreviousNode)));
它抛出了这个异常

NodeLib.dll中发生类型为“System.StackOverflowException”的未处理异常


我不知道我错过了什么或误解了什么。提前谢谢你

我认为您的问题在于比较列表的方式,如果要将列表与自身进行比较,请尝试以下操作:

var test = from i in nodes
    from j in nodes.SkipWhile(j => j != i)
    where i != j
    select ReferenceEquals(i.NextNode, j.PreviousNode);

Link->

可能是由枚举数或属性的实现引起的。没有更多信息很难判断。这感觉像是某个地方的递归问题,即您的一个节点引用了一个引用了一个最终引用了原始节点的
PreviousNode
。不过,这只是猜测而已。@marsze怎么会发生这种事?如果我错了,请纠正我,但我只是比较节点是否通过引用共享。每次运行程序时,我都会在不同的DLL中得到异常。它并不总是在
NodeLib.dll中
您的
节点是什么类型的
对象?发布节点类代码和设置节点列表结构的代码可能也会有帮助。对于有两个节点的列表,它返回的列表仅包含一个
布尔值
。您应该能够相应地修改以获得所需的结果使用提供的链接。您的问题是,您正在对列表进行自比较,当节点未排序时,您选择哪一个<代码>o,
oo
或两者都有?。我将建议首先使用普通循环并遍历列表本身,然后根据需要修改为Linq。