如果你在一个类中使用集合List<T>
甚至是arraylist,为什么你想要实现IEnumerable并返回枚举器时你想要创建自己的枚举类。我在网上看到人们创建自己的可枚举类并实现当前,移动文本等的例子......
答案 0 :(得分:7)
好吧,如果你有一个集合类,你可能不只是包装了一些其他的Enumerable集合,并且会准确地返回你应该的集合。
也就是说,我总是喜欢使用yield关键字,甚至手动定义一个可枚举的。定义当前/移动的人的大多数例子根本不知道产量或如何使用它。 (我曾经为了这个原因实现了一个可以定义Current / Move的可枚举类。)
另一种情况可能是底层集合是旧的,并没有实现IEnumerable<T>
而只是IEnumerable
。如果您的收藏品是强类型的,那么您需要做的不仅仅是返回他们的枚举器(至少它将是.Cast<T>()
电话)。
如果你有一个底层集合,它也可能是你不想公开暴露的一些私有嵌套类(可能是某种自定义键值对)的集合。在这种情况下,您可能需要返回.Select调用,而不是仅仅传递现有的枚举器(但很可能不需要实际实现您自己的迭代器)。
答案 1 :(得分:3)
假设您要遍历文件行并且不想将它们全部加载到内存中。您可以返回IEnumerable<string>
,它将按需读取下一行,而不是将所有内容加载到内存中。我也更喜欢使用yield
来处理这种情况,就像@Servy提到的那样。
答案 2 :(得分:0)
这些例子是否可能是预先仿制药?我可以看到,如果你没有使用泛型,那么你将被迫实现IEnumerable并实现它的方法。