public IEnumerable <Span> Flatten() { // Create an enumerable that flattens the tree for use by syntax highlighters, etc. foreach (SyntaxTreeNode element in Children) { Span span = element as Span; if (span != null) { yield return(span); } else { Block block = element as Block; foreach (Span childSpan in block.Flatten()) { yield return(childSpan); } } } }