You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中yield return的操作数是否需要实现IEnumerable接口?

C# yield return 相关疑问解答

核心结论

  • TCustom类型不需要实现IEnumerable接口
  • 即使TCustom未实现IEnumerable接口,也完全可以作为yield return语句的返回对象

原理说明

你产生这个疑问大概率是混淆了「迭代器方法返回的集合类型」和「集合中单个元素的类型」的要求:

  1. 你定义的Iterator()方法返回值为非泛型的IEnumerable,这个接口是用来标记「当前方法返回的是一个可枚举的集合」,约束的是整个集合的行为,和集合内的元素无关。
  2. yield return 后面跟着的是集合中的单个元素:
    • 对于非泛型IEnumerable对应的迭代器来说,只要求返回的元素可以隐式转换为object即可,所有C#类型都默认满足这个要求
    • 如果你使用泛型版本的IEnumerable<TCustom>作为迭代器返回值,仅要求yield return返回的元素是TCustom类型或可隐式转换为TCustom的类型,同样不需要元素实现IEnumerable接口
  3. 只有当你需要把某对象作为「可枚举集合整体」通过yield return返回时,才要求该对象实现IEnumerable接口,比如你的迭代器返回值是IEnumerable<IEnumerable>的场景。

代码验证

你提供的示例代码本身可以正常编译运行,仅需确认RandomCollection实现的IEnumerable接口枚举出来的元素确实是TCustom类型即可,TCustom本身不需要做任何额外的接口实现。


内容的提问来源于stack exchange,提问作者Samin Sadman Shad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:57:02