我希望我的类型能够实现IEnumerable<string>.我尝试在Nutshell中关注C#,但出了点问题:
public class Simulation : IEnumerable<string>
{
private IEnumerable<string> Events()
{
yield return "a";
yield return "b";
}
public IEnumerator<string> GetEnumerator()
{
return Events().GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了构建错误
错误1'EventSimulator.Simulation'未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.'EventSimulator.Simulation.GetEnumerator()'无法实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.IEnumerator'.
如果我只想要一个只有日期,整数或双精度的排序列表,是否真的有必要定义一个SortedList(Integer,Integer)?
似乎很吸引我,但可能只是琐事.我更喜欢使用SortedList(Integer).
(这个问题与.Net通用集合有关)
在集合的框架类中,我经常看到IEnumerator<T>单独实现为内部类,并在GetEnumerator方法中返回它的实例.
现在假设我正在编写自己的集合类,它们将内置一个内置集合List<T>或T[]作为持有者,如下所示:
public class SpecialCollection<T> : IEnumerable<T>
{
List<T> list;
public SpecialCollection<T>()
{
}
public IEnumerator<T> GetEnumerator()
{
return list.GetEnumerator();
//or
return list.Where(x => some logic).GetEnumerator();
//or directly rely on yield keyword
yield return x; //etc
}
}
Run Code Online (Sandbox Code Playgroud)
我应该编写自己的枚举器类,还是可以返回List<T>类的枚举器?我是否应该编写自己的枚举类?
我也有一个相关的问题.如果它不是那么重要或没有太大的区别,为什么BCL中的每个集合类都写自己的IEnumerator?
例如,List<T>班级有类似的东西
T[] items;
public IEnumerator<T> GetEnumerator()
{
return new List<T>.Enumerator(items);
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个实现的简单集合类ICollection<T>.一切都基本有效,除非我添加一个IEnumerator<T> GetEnumerator()方法,它抱怨我没有IEnumerator GetEnumerator()方法.反之亦然.我不允许两者都有,因为它们只有返回类型不同,所以我真的很困惑编译器想要的东西.
以下是错误,正如它们给我的错误:
错误CS0738:
MyClass<T>' does not implement interface memberSystem.Collections.Generic.IEnumerable.GetEnumerator()'和最佳实现候选者MyClass<T>.GetEnumerator()' return typeSystem.Collections.IEnumerator'不匹配接口成员返回类型`System.Collections.Generic.IEnumerator'
或者,或者我可以:
错误CS0738:
MyClass<T>' does not implement interface memberSystem.Collections.IEnumerable.GetEnumerator()'和最佳实现候选者MyClass<T>.GetEnumerator()' return typeSystem.Collections.Generic.IEnumerator'不匹配接口成员返回类型`System.Collections.IEnumerator'