我在用C#编写的项目中跟踪遗留代码.
我找到以下代码:
public class FooCollection : Collection<IFoo> {};
Run Code Online (Sandbox Code Playgroud)
我不明白为什么(以及何时)我们需要像这样创建我们自己的Collection类.
为什么不直接使用内置的集合(array,List<T>,Dictionary<K,V>,...)
什么是数据结构Collection<T>?阵列?或链表?
我已经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) 如何在GetEnumerator不使用yield关键字的情况下重写方法?方法代码:
public IEnumerator<int> GetEnumerator()
{
yield return 1;
Console.WriteLine("1");
yield return 2;
}
Run Code Online (Sandbox Code Playgroud)
我只知道如何手动实现它.
我有一个包装对象列表的类.我希望这个类与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)
给我同样的错误.
我有一个带有索引器的类。我希望能够在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)
该类是这样构建的:
我希望能够在类中的this上运行 foreach 循环,因此我可以使用索引器的获取和设置逻辑获取和设置数组字段。
这就是为什么我需要实现 GetEnumerator 方法,但我不知道那里需要什么样的实现。
谢谢你的帮助。
注意:我如何实现 IEnumerable<T>线程对我没有帮助,我已经阅读过了。唯一的实现是返回数组的枚举器。
c# ×5
enumerator ×2
ienumerable ×2
ienumerator ×2
.net ×1
arrays ×1
collections ×1
foreach ×1
interface ×1
linq ×1