何时创建自己的IEnumerable类

时间:2012-03-01 17:27:32

标签: c# .net ienumerable

如果你在一个类中使用集合List<T>甚至是arraylist,为什么你想要实现IEnumerable并返回枚举器时你想要创建自己的枚举类。我在网上看到人们创建自己的可枚举类并实现当前,移动文本等的例子......

3 个答案:

答案 0 :(得分:7)

好吧,如果你有一个集合类,你可能不只是包装了一些其他的Enumerable集合,并且会准确地返回你应该的集合。

也就是说,我总是喜欢使用yield关键字,甚至手动定义一个可枚举的。定义当前/移动的人的大多数例子根本不知道产量或如何使用它。 (我曾经为了这个原因实现了一个可以定义Current / Move的可枚举类。)

另一种情况可能是底层集合是旧的,并没有实现IEnumerable<T>而只是IEnumerable。如果您的收藏品是强类型的,那么您需要做的不仅仅是返回他们的枚举器(至少它将是.Cast<T>()电话)。

如果你有一个底层集合,它也可能是你不想公开暴露的一些私有嵌套类(可能是某种自定义键值对)的集合。在这种情况下,您可能需要返回.Select调用,而不是仅仅传递现有的枚举器(但很可能不需要实际实现您自己的迭代器)。

答案 1 :(得分:3)

假设您要遍历文件行并且不想将它们全部加载到内存中。您可以返回IEnumerable<string>,它将按需读取下一行,而不是将所有内容加载到内存中。我也更喜欢使用yield来处理这种情况,就像@Servy提到的那样。

答案 2 :(得分:0)

这些例子是否可能是预先仿制药?我可以看到,如果你没有使用泛型,那么你将被迫实现IEnumerable并实现它的方法。