c# - 如何在 C# 中创建一个真正不可变的双向链表?

标签 c# data-structures language-features

这更像是一个理论问题:是否可以通过任何方式在 C# 中创建一个真正不可变的双向链表?我看到的一个问题是 2 个相邻节点的相互依赖。

“真正”是指使用只读字段。

最佳答案

这可能与棘手的构造函数逻辑有关。例如

public sealed class Node<T> { 
  readonly T m_data;
  readonly Node<T> m_prev;
  readonly Node<T> m_next;

  // Data, Next, Prev accessors omitted for brevity      

  public Node(T data, Node<T> prev, IEnumerator<T> rest) { 
    m_data = data;
    m_prev = prev;
    if (rest.MoveNext()) {
      m_next = new Node(rest.Current, this, rest);
    }
  }
}

public static class Node {    
  public static Node<T> Create<T>(IEnumerable<T> enumerable) {
    using (var enumerator = enumerable.GetEnumerator()) {
      if (!enumerator.MoveNext()) {
        return null;
      }
      return new Node(enumerator.Current, null, enumerator);
    }
  }
}

Node<string> list = Node.Create(new [] { "a", "b", "c", "d" });

关于c# - 如何在 C# 中创建一个真正不可变的双向链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757378/

相关文章:

c# - 为什么 'using' 没有 catch block ?

haskell - 缺失的褶皱

c# - 使用 linq 查询时的行号

algorithm - 删除红黑树的整个子树会保留其属性吗?

c++ - AVL树的插入方法?

http - RESTful 集合和控制成员详细信息

java - Java 7 中的链式调用?

c# - 无法为接受 Expression<Func> 的方法推断实际类型

c# - 如何在 ASP.NET MVC 中的 Controller 外部生成 URL?

javascript - MMS 是否支持发送 HTML 内容?