【发布时间】:2021-11-18 20:45:33
【问题描述】:
我已经开始学习迭代器方法和 C# 中 IEnumerators 的实现。我对 yield return 语句感到困惑。
假设,我创建了一个迭代器方法“Iterator()”,并且我有一个包含“TCustom”类型项目的集合“myCollection”。 myCollection 是实现 'IEnumerable' 的集合类型,但类型 'TCustom' 没有实现它。
IEnumerable Iterator()
{
foreach(TCustom item in myCollection)
{
yield return item;
}
}
class RandomCollection : IEnumerable{....}
class TCustom {....}
RandomCollection myCollection = new RandomCollection();
所以 yield 语句从“myCollection”返回“TCustom”类型的“item”对象。如果“TCustom”是从我的源代码创建的自定义类型,它是否必须实现 IEnumerable 接口?而如果'TCustom'类型没有实现'IEnumerable'接口,它可以是yield return语句的返回类型吗? (yield return item;)
【问题讨论】:
-
yield return生成集合中的各个项目,因此 T 不必(通常也不会)实现 IEnumerable。 -
仅供参考,单个 T 通常是泛型中类型的占位符,而不是特定类。一开始让我很困惑????
-
@HansKesting 感谢您的更正
-
这取决于集合的类型。如果是
IEnumerable<int>,则必须提供int。如果只是IEnumerable,它可以是任何object。 -
再次:你在 yield return 中返回的不是集合,它是一个单独的元素。只有所有遇到的收益返回一起形成最终集合。
标签: c# ienumerable yield-return