【发布时间】:2015-04-19 00:29:34
【问题描述】:
最近我开始了一个爱好项目来重写集合结构,首先删除不通用的IEnumerator 和IEnumerable,创建新的 IEnumerator/IEnumerable 基础接口。在我的新可枚举接口和普通接口之间创建转换时,我很快遇到了产量问题。
我的IEnumerable<T> 和IEnumerator<T> 与普通的完全相同,只是它们不是从非通用的继承而来。
为什么 yield 不适用于我的接口? foreach 确实适用于我的界面。
例子:
public static System.Collections.Generic.IEnumerable<T> ToMSEnumerable(this My.IEnumerable<T> enumerable)
{
foreach (var item in enumerable) // enumerating my enumerable works
{
yield return item; // this works
}
}
public static My.IEnumerable<T> ToMyEnumerable(this System.Collections.Generic.IEnumerable<T> enumerable)
{
foreach (var item in enumerable) // obviously work
{
yield return item; // this is where its not working.
// I haven't touched this in a few day, so I don't remember
// the error message
}
}
【问题讨论】:
-
我很好奇 - 您的
My.IEnumerable<T>与标准IEnumerable<T>有何不同? -
@Enigmativity 它没有非泛型
GetEnumerator() -
为什么这很重要?
-
@Enigmativity 接口的用户不必实现它吗?更好的类型安全性?
-
为什么用户仍然需要实现它?考虑到内置集合和运算符的数量,这将是一件非常罕见的事情。