考虑这个代码片段:
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";
}
}
Test().ToString()
返回“ConsoleApplication1.Program+d__0”而不是预期的“test”。
Test()
方法甚至没有被执行 - 只是返回它的名称!第二种方法TestOk()
工作得很好。
到底是怎么回事?
它在编译器生成的 IEnumerable 实现上打印 ToString 方法 - 迭代器只是语法糖 - 生成 IEnumerable 的真正实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)