我有一个不能包含重复项的结构,因此我选择将其表示为一个哈希集
class Team
{
private HashSet<HeroStats> team = new HashSet<HeroStats>();
public int count()
{
int res = 0;
res = team.Count;
return res;
}
public Team()
{
}
public void add(HeroStats hero)
{
if (team.Count <= 5)
team.Add(hero);
else
Console.WriteLine("Team is full , create another team");
}
public List<HeroStats> print() {
List<HeroStats> l = new List<HeroStats>();
foreach (HeroStats h in team)
l.Add(h);
return l;
}
}
在另一个课程中,我想对Team
类型的对象做一个foreachpublic void fitness(Team t)
{
int score;
foreach(HeroStats hero in t)
{
}
}
如何在不丢弃hashset的情况下使foreach函数工作?
答案 0 :(得分:4)
你需要从外部暴露一系列英雄,你可以从你的集合中获得。你不希望完全访问整个集合,因为他们可以在集合满时添加英雄,或者取出他们不应该的英雄等等。你只是希望他们能够遍历所有的英雄那些在那儿。 IEnumerable<T>
完全暴露了该功能。
public IEnumerable<HeroStats> Heros { get { return team; } }
来电者现在可以写:
public void fitness(Team t)
{
int score;
foreach(HeroStats hero in t.Heros)
{
DoStuffWithHero(hero);
}
}
答案 1 :(得分:3)
您必须在Team类中实现IEnumerable。
public class Team : IEnumerable<HeroStats>
{
private HashSet<HeroStats> stats = new HashSet<HeroStats>();
public IEnumerator<HeroStats> GetEnumerator()
{
return stats.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return stats.GetEnumerator();
}
}