我已经在C ++世界中钻研了一段时间,但现在我再次进入.NET世界,VB和C#,我想知道你是否有一个代表某种东西的类,你想要能够使用它这在foreach循环中等等......是自己实现IEnumerable
和IEnumerator
更好还是从List<T>
继承,其中T是对象类型的单数形式?< / p>
我知道在C ++中,从容器继承被认为是个坏主意。
但是.NET呢。
编辑:
似乎我的问题有点被误解了。我对.NET中的现有集合并不感到不满。这是我的问题,我有一个名为'Person'的课程,我需要一个名为'Scouts'的集合,我想在一个名为'Scouts'的课程中,此时我希望能写出来
foreach Person in Scouts
...
将此Scouts作为People的集合,并能够在foreach循环中使用它的最佳方法是什么?
答案 0 :(得分:3)
你说:
我有一个名为'人'的班级和我 需要一个名为'Scouts'的集合, 我想要在一个叫做的类中 “侦察兵”,此时我想成为 能够写
foreach Person in Scouts ...
如果我理解正确,你想要:
class Scouts : IEnumerable<Person>
{
private List<Person> scouts;
public IEnumerator<Person> GetEnumerator()
{
return scouts.GetEnumerator();
}
}
答案 1 :(得分:1)
在.NET中,很少实现IEnumerable<T>
或派生自List<T>
。如果您需要带有索引器的动态长度集合,则可以直接使用List<T>
,如果需要固定长度集合,则可以使用数组T[]
。 System.Collections.Generic
命名空间包含大多数通用集合类。
答案 2 :(得分:1)
真正的问题是,你为什么要实施自己的“收藏品”?也就是说,为什么你对现有的藏品不满意呢?
一旦你回答了这个问题(并且仍然确定你想要这样做),你最好继承System.Collections.ObjectModel
命名空间中的一个集合 - 即Collection<T>
,{{ 1}}或KeyedCollection<T>
,具体取决于您的特定需求。
答案 3 :(得分:0)
正如Darin所说,直接使用类而不是实现接口更为常见。