我一直在使用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
答案 0 :(得分:3)
您应该使用AddBefore
上的AddAfter
/ AddFirst
/ AddLast
/ LinkedList
方法向列表中添加元素。
我不知道100%,但我认为API表面不允许您修改Next
的{{1}}元素,因为这会让您最终遇到奇怪的事情,比如周期,不完整的清单等。主要是由于状态不一致的事情。文档说LinkedListNode
不支持:
LinkedList
类不支持链接,拆分,循环或其他可能使列表处于不一致状态的功能。列表在单个线程上保持一致。LinkedList<T>
支持的唯一多线程方案是多线程读取操作。
作者没有用setter公开低级LinkedList<T>
/ Next
属性,而是决定提供完成常见插入/删除操作的方法并确保所有正确的事情更好发生。例如。他们确保每次插入/删除都会更新Previous
和Next
。如果他们允许您直接修改Previous
或Next
,则无法确保两者在必要时始终更新。你仍然可以完成你所需要的东西,但是当人们自己实现这些操作时,它们限制了错误的可能性。
答案 1 :(得分:2)
Next
属性只有getter,它返回LinkedListNode
中的下一个项目。
我认为您正在寻找start.List.AddLast(newNode)
。
希望有所帮助,