在哪里可以学习C#中枚举数的详细信息?

在哪里可以学习C#中枚举数的详细信息?,c#,.net,ienumerable,C#,.net,Ienumerable,有没有好的资源来解释枚举数和自定义枚举数的概念?特别是有一个很好的实例,说明了为什么要自己实现IEnumerable,以及如何有效地使用它 我偶尔会遇到yield,我正试图更好地理解它。最简单的例子: IEnumerable<string> GetNames() { yield return "Bob"; yield return "Bob's uncle"; yield return "Alice"; yield return "Stacy"; yield re

有没有好的资源来解释枚举数和自定义枚举数的概念?特别是有一个很好的实例,说明了为什么要自己实现
IEnumerable
,以及如何有效地使用它

我偶尔会遇到
yield
,我正试图更好地理解它。

最简单的例子:

IEnumerable<string> GetNames()
{
  yield return "Bob";
  yield return "Bob's uncle";
  yield return "Alice";
  yield return "Stacy";
  yield return "Stacy's mom";
}

要查看它的运行情况,请在
GetNames
方法的每一行上放置一个调试器断点。

可以在的MSDN页面上找到一个很好的示例。

我找到的最好的示例和参考实际上是在全能的Jon Skeet的C#indepth书中。这本书不太贵,而且值得你学习C#。另一本我在学习IEnumerable和IEnumerator时发现非常有用的书是Troelsen的Pro C#2008。它解释了接口包含的内容以及如何使用“yield”关键字构建迭代器


希望能有所帮助。

在了解了基本知识之后,这里有一些更多的资源供您参考

Wes有一篇关于迭代器性能特征的优秀文章:

如果您有疑问,为什么在迭代器块中可以执行这么多奇怪的限制,下面是我的七部分系列文章,介绍是什么激发了这些不寻常的规则:


@slc等待jon skeet的回答……@leppie这是什么意思?@leppie明白了,上面写的是冷漠。。。我从来不是说你的回答对这个问题漠不关心…@Pandiya Chendur:看来你希望jon回答每个问题。。。你不应该期待任何东西,尤其是如果它是免费的。你可能想给一个英文链接:)我想我把我的文化转向了美国。。。谢谢!不幸的是,该示例没有涵盖收益率,这可能是造成混淆的真正原因。请注意,这是第一版的第6章,它曾经是(可能现在仍然是)免费示例章节之一。有一个链接:@Martinho:不幸的是,直接链接不起作用。你需要先通过——我怀疑是在检查推荐人。但是是的,它仍然是免费的:)这是有道理的,但是你能解释一下Count()方法是如何工作的吗?它是否强制枚举器遍历所有结果以对其进行计数?还有,为什么有些代码有“屈服断裂;”<代码>收益率突破基本上是说“停止,不再有元素”。是的,
Count()
(不是
Count
Length
)如果没有快捷方式(例如
Count
Length
)将迭代整个集合。谢谢!现在它开始有意义了,但是你所说的快捷方式是什么意思呢?
IEnumerable
的基本类型可能是
列表
数组
哈希表
,所有这些都有一个属性来确定长度/计数,而不必遍历整个集合。
GetNames().ElementAt(4)
已经开始了。
foreach (var name in GetNames())
{
  Console.WriteLine(name);
}