相关疑难解决方法(0)

为什么以及何时从Collection <T>继承

我在用C#编写的项目中跟踪遗留代码.

我找到以下代码:

public class FooCollection : Collection<IFoo> {};
Run Code Online (Sandbox Code Playgroud)

我不明白为什么(以及何时)我们需要像这样创建我们自己的Collection类.

为什么不直接使用内置的集合(array,List<T>,Dictionary<K,V>,...)

什么是数据结构Collection<T>?阵列?或链表?

c# collections data-structures

9
推荐指数
1
解决办法
5381
查看次数

尽管GetEnumerator和foreach运行良好,为什么我不能使用OrderBy?

我已经GetEnumerator为一个简单的类实现了这个方法,并且很惊讶我无法使用linq命令枚举器(调用this.OrderBy(x => x)无效).有人可以解释一下这里发生了什么吗?我做错了什么或只是想要迭代的调查员?

class Test
{
    private Dictionary<int, string> dict
        = new Dictionary<int, string>();

    public IEnumerator<int> GetEnumerator()
    {
        return dict.Keys.GetEnumerator();
    }

    public Test()
    {
        dict[1] = "test";
        dict[2] = "nothing";
    }

    public IEnumerable<int> SortedKeys
    {
        get { return this.OrderBy(x => x); } // illegal!
    }

    public void Print()
    {
        foreach(var key in this)
            Console.WriteLine(dict[key]);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# linq enumerator

3
推荐指数
1
解决办法
395
查看次数

如何在没有yield语句的情况下实现Iterator模式(IEnumerator <T>)

如何在GetEnumerator不使用yield关键字的情况下重写方法?方法代码:

public IEnumerator<int> GetEnumerator()
{
    yield return 1;

    Console.WriteLine("1");

    yield return 2;
}
Run Code Online (Sandbox Code Playgroud)

我只知道如何手动实现它.

.net c# ienumerator design-patterns

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

使类与foreach兼容

我有一个包装对象列表的类.我希望这个类与foreach循环兼容.

我已经看到了几个关于如何在SO上做到这一点的问题,但大多数答案都没有为我编译.

class TrackList
{
    private List<Track> tracks = new List<Track>();
}
Run Code Online (Sandbox Code Playgroud)

你会添加什么来使其适用于每个?

到目前为止,我有:

class TrackList : IEnumerable<Track>
{
    // ...

    public IEnumerator<Track> GetEnumerator()
    {
        return trackList.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerator.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它说(翻译错误):

错误1'HP.TrackList'未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.'HP.TrackList.GetEnumerator()'无法实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有与'System.Collections.IEnumerator'对应的返回类型.XXX\TrackList.cs 11

如果相反我使用:

IEnumerator<Track> IEnumerator<Track>.GetEnumerator()
{
    return this.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

给我同样的错误.

c# ienumerable ienumerator foreach interface

0
推荐指数
1
解决办法
920
查看次数

在'this'C#上为'foreach'实现GetEnumerator

我有一个带有索引器的类。我希望能够在this上运行 foreach 循环,但它说我必须实现 Enumerator 接口。这让我实现了两种方法:

    #region IEnumerable implementation

    public IEnumerator<Type> GetEnumerator() {
        throw new NotImplementedException();
    }

    #endregion

    #region IEnumerable implementation

    IEnumerator IEnumerable.GetEnumerator() {
        throw new NotImplementedException();
    }

    #endregion
Run Code Online (Sandbox Code Playgroud)
  1. 你能举例说明这两者之间有什么区别吗?
  2. 它需要什么样的实现?

该类是这样构建的:

  1. 它有一个字段,它是一个用于保存数据的数组。
  2. 它有一个索引器来获取和设置上述数组中的特定元素。

我希望能够在类中的this上运行 foreach 循环,因此我可以使用索引器的获取和设置逻辑获取和设置数组字段。

这就是为什么我需要实现 GetEnumerator 方法,但我不知道那里需要什么样的实现。

谢谢你的帮助。

注意:我如何实现 IEnumerable<T>线程对我没有帮助,我已经阅读过了。唯一的实现是返回数组的枚举器。

c# arrays ienumerable enumerator

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