The yeild return method is handled differently than the compiler - if you check the compiled assembly using a reflector, then what happens here becomes a little clearer:
private static IEnumerable<char> Test() { return new <Test>d__0(-2); }
Wheras TestOk returns a string, Test instead returns the class that the compiler generates for you. What you see is a string representation of this class by default.
source share