using System.Collections;
using System.Collections.Generic;
public static void Main()
var test = new AlphabetEnumerable
"z", "Bravo", "alpha", "D", "u"
Console.WriteLine("Round 1");
foreach (var letter in test)
Console.WriteLine(letter);
Console.WriteLine("=============");
Console.WriteLine("Round 2");
foreach (var letter in test)
Console.WriteLine(letter);
Console.WriteLine("=============");
var test2 = new AlphabetEnumerable();
Console.WriteLine("Empty");
foreach (var letter in test2)
Console.WriteLine(letter);
public class AlphabetEnumerable : LinkedList<string>, IEnumerable
public void Add(string val)
var currentNode = base.First;
while (currentNode != null && currentNode.Value.CompareTo(val) < 0)
currentNode = currentNode.Next;
base.AddBefore(currentNode, val);
new public IEnumerator GetEnumerator()
return new AlphabetEnumerator(this.First);
public class AlphabetEnumerator : IEnumerator
private LinkedListNode<string> _firstNode;
private LinkedListNode<string> _currentNode;
public Object Current {get { return _currentNode == null? null : _currentNode.Value; } }
public AlphabetEnumerator(LinkedListNode<string> firstNode)
if (_currentNode == null)
_currentNode = _firstNode;
_currentNode = _currentNode.Next;
return _currentNode != null;