【发布时间】:2015-08-22 00:45:59
【问题描述】:
好的,下面是基本代码:
class foo
{
String name;
int property;
}
class bar
{
private List<foo> a;
private List<foo> b;
}
我想这样做,以便调用代码可以遍历任一列表,但我希望保护它们不被编辑。我已经研究过实现 IEnumarable 接口,但问题是它需要一个“GetEnumerable”定义,但我想要两个不同的枚举器。例如,我想能够说
foreach(foo in bar.getA())
{ //do stuff }
然后
foreach(foo in bar.getB())
{ //do stuff }
我是否必须对每个元素进行子类化并在每个元素上实现 IEnumerable 接口,然后将 THOSE 作为属性包含在内?我误解了 IEnumerable 接口吗?我知道 List 类有它自己的 Enumerator,所以我可以做类似的事情
class bar
{
private List<foo> a;
private List<foo> b;
public IEnumerator<foo> getAEnumerator()
{ return a.GetEnumerator();
public IEnumerator<foo> getBEnumerator()
{ return b.GetEnumerator();
}
但是我的 for 循环看起来像这样:
bar x = new bar();
IEnumerator<foo> y = x.getAEnumerator();
while (y.moveNext())
{
foo z = y.Current;
}
所以我失去了“foreach”的可读性。
有没有办法在不公开这些列表的情况下对这些列表使用“foreach”?我仍在尝试了解 IENumerable 接口,所以也许我遗漏了一些明显的东西。
【问题讨论】:
标签: c# list ienumerable ienumerator