/// <summary> /// 元素类 /// </summary> class LinkedListNode<T> { private T value; public LinkedListNode(T value) { this.value = value; } //当前元素 public T Value { get { return value; } } //定义了下一个元素 private LinkedListNode<T> next; public LinkedListNode<T> Next { get { return next; } internal set { next = value; } } //定义了前一个元素 private LinkedListNode<T> prev; public LinkedListNode<T> Prev { get { return prev; } internal set { prev = value; } } //※internal定义了只有在同一程序集的文件中,Next才是可以被设置的 } /// <summary> /// 链表类 /// 实现IEnumerable接口,以实现对链表的迭代 /// </summary> class LinkedList<T> : IEnumerable { //链表的头 private LinkedListNode<T> first; public LinkedListNode<T> First { get { return first; } } //链表的结尾 private LinkedListNode<T> last; public LinkedListNode<T> Last { get { return last; } } //AddLast方法在链表结尾添加一个元素, //如果该链表为空,就将该元素设置为链表的开始和结尾 public LinkedListNode<T> AddLast(T node) { LinkedListNode<T> newNode = new LinkedListNode<T>(node); if (first == null) { first = newNode; last = first; } else { last.Next = newNode; last = newNode; } return newNode; } //实现接口IEnumerator的GetEnumerator方法 //通过包含yeild语句的迭代块,来实现对链表的迭代(foreach的实现) public IEnumerator<T> GetEnumerator() { LinkedListNode<T> current = first; while (current != null) { yield return current.Value; current = current.Next; } } //IEnumerator泛型接口的实现方式 IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } class Program { static void Main(string[] args) { LinkedList<int> lst = new LinkedList<int>(); lst.AddLast("c"); //应为是用了泛型,编译时会检验出该错误 } } /// <summary> /// 元素类 /// </summary 你的当前访问异常,请进行认证后继续阅读剩余内容。 提交