Side-effects do not mix with lazy on-demand streams! This is unfortunately a problem with bringing functional programming constructs to a language with idiomatic pervasive mutation.
My layman's impression was that 'yield return' was largely syntactic sugar around an iterator, rather similar to Java.