哈希集中的Foreach

时间:2014-09-11 15:37:43

标签: c# foreach hashset

我有一个不能包含重复项的结构,因此我选择将其表示为一个哈希集

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

类型的对象做一个foreach
public void fitness(Team t)
    {

        int score;
        foreach(HeroStats hero in t)
        {
        }

    }

如何在不丢弃hashset的情况下使foreach函数工作?

2 个答案:

答案 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();
    }
}