You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C#的LinkedList改造为循环双向链表解决边界切换问题

解决循环双向链表切换问题

问题背景

现有基于System.Collections.Generic.LinkedList<Entry>的双向链表,Entry为存储数据库行的结构体。通过按钮切换链表节点时,无法实现循环切换:

  • 在第一个节点点击上一页按钮,无法跳转到最后一个节点
  • 在最后一个节点点击下一页按钮,无法跳转到第一个节点

原有按钮逻辑直接调用Previous.Value/Next.Value,当处于首尾节点时会抛出空引用异常;尝试用??运算符报错,因为Entry是值类型,??仅支持可空类型。

解决方案

核心思路是先获取当前节点的LinkedListNode<Entry>实例,判断Previous/Next是否为null,为空时切换到链表的另一端节点:

修改上一页按钮逻辑

private void previousButton()
{
    var currentNode = items.Find(runner);
    // 如果当前是第一个节点,Previous为null,切换到最后一个节点
    var targetNode = currentNode.Previous ?? items.Last;
    runner = targetNode.Value;
    // 更新图形元素绑定
}

修改下一页按钮逻辑

private void nextButton()
{
    var currentNode = items.Find(runner);
    // 如果当前是最后一个节点,Next为null,切换到第一个节点
    var targetNode = currentNode.Next ?? items.First;
    runner = targetNode.Value;
    // 更新图形元素绑定
}

注意事项

  • 确保Entry结构体正确实现了Equals和GetHashCode方法,否则items.Find(runner)可能无法找到对应的节点(结构体默认值比较为逐字段比较,若包含引用类型字段或需自定义比较逻辑,需手动重写)。
  • 若链表为空,需在Prepare方法中添加空链表判断,避免后续操作抛出空引用异常。

内容的提问来源于stack exchange,提问作者jotaro-gogogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:09:45