这更多的是一个理论问题:在 C# 中是否可以通过任何方式创建一个真正不可变的双向链表?我认为一个问题在于两个相邻节点的相互依赖。
我所说的“真正”是指使用只读字段。
这可以通过棘手的构造函数逻辑来完成。例如
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" });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)