Exposing two properties which return different enumerators is probably the right way to go. Instead of your data structure implementing IEnumerable
itself (I'm guessing with that one), create two different IEnumerator
implementations, and have a propery exposed from the main class for each one. Then the using code is straightforward:
foreach( var item in data.FastEnumerator )
{
....
foreach( var item in data.LexicalEnumerator )
{
....