Crouching Enumerator, Hidden Boxing

A few months ago, I was playing around with a simple C# permutation generator to build a word list, with each character position having its own list of characters to iterate through: List<T>.Enumerator enumerator = characterList.GetEnumerator(); while (condition) { if (!enumerator.MoveNext()) { enumerator.Reset(); enumerator.MoveNext(); } Consume(enumerator.Current); } Oddly, I was getting a compilation error on [...]