为什么LinkedListNode Next属性只读?

时间:2018-03-31 18:44:20

标签: c#

我一直在使用Visual Studio IDE处理LeetCode问题,并且在尝试将linkedlistnode的下一个值设置为新节点时发现了一个问题,即'属性或索引器......下一步无法分配 - 它只读'。我可以在节点旁边分配节点,但不能将节点分配给节点的下一个节点。为什么这是.NET的情况?

var l1Value = l1 == null ? 0 : l1.Value;
var l2Value = l2 == null ? 0 : l2.Value;
var newNode = new LinkedListNode<int>((l1Value + l2Value + overflow) % 10);
start.Next = newNode; <------ red squiggly
start = start.Next; <------ no red squiggly

2 个答案:

答案 0 :(得分:3)

您应该使用AddBefore上的AddAfter / AddFirst / AddLast / LinkedList方法向列表中添加元素。

我不知道100%,但我认为API表面不允许您修改Next的{​​{1}}元素,因为这会让您最终遇到奇怪的事情,比如周期,不完整的清单等。主要是由于状态不一致的事情。文档说LinkedListNode不支持:

  

LinkedList类不支持链接,拆分,循环或其他可能使列表处于不一致状态的功能。列表在单个线程上保持一致。 LinkedList<T>支持的唯一多线程方案是多线程读取操作。

作者没有用setter公开低级LinkedList<T> / Next属性,而是决定提供完成常见插入/删除操作的方法并确保所有正确的事情更好发生。例如。他们确保每次插入/删除都会更新PreviousNext。如果他们允许您直接修改PreviousNext,则无法确保两者在必要时始终更新。你仍然可以完成你所需要的东西,但是当人们自己实现这些操作时,它们限制了错误的可能性。

答案 1 :(得分:2)

Next属性只有getter,它返回LinkedListNode中的下一个项目。

我认为您正在寻找start.List.AddLast(newNode)

希望有所帮助,