相关疑难解决方法(0)

如何使用GetEnumerator()实现IEnumerable <T>?

我希望我的类型能够实现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'.

c# ienumerable

17
推荐指数
2
解决办法
4万
查看次数

为什么排序列表必须具有键值对?

如果我只想要一个只有日期,整数或双精度的排序列表,是否真的有必要定义一个SortedList(Integer,Integer)?

似乎很吸引我,但可能只是琐事.我更喜欢使用SortedList(Integer).

(这个问题与.Net通用集合有关)

.net generics collections

14
推荐指数
1
解决办法
1551
查看次数

我什么时候应该单独实现IEnumerator <T>?

在集合的框架类中,我经常看到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)

.net c# ienumerator enumerator design-guidelines

4
推荐指数
1
解决办法
700
查看次数

实现ICollection时,无法同时实现GetEnumerator返回IEnumerator和IEnumerator <T>

我正在编写一个实现的简单集合类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'

.net c# generics

2
推荐指数
1
解决办法
2013
查看次数