奇数方法行为 - 函数的ToString

ddt*_*ddt 4 c# c#-4.0

请考虑以下代码段:

class Program {
  static void Main(string[] args) {
   Console.WriteLine(Test().ToString());
  }

  static IEnumerable<char> Test() {
   foreach (var ch in "test")
    yield return ch;
  }
  static IEnumerable<char> TestOk() {
   return "test";
  }
 }
Run Code Online (Sandbox Code Playgroud)

Test().ToString() 返回"ConsoleApplication1.Program + d__0"而不是预期的"test".

Test()方法甚至没有执行 - 只返回它的名字!第二种方法TestOk()效果很好.

到底是怎么回事?

On *_*und 7

它在编译器生成的IEnumerable实现上打印ToString方法 - 迭代器只是语法糖 - 生成IEnumerable的实际实现.

  • 我不确定你为什么认为这是预期的结果.结果是一个枚举,返回"test"中的每个字符.你可以通过遍历它并连接字符来构建一个字符串. (2认同)