C#使用foreach创建一副牌

时间:2014-02-13 19:18:09

标签: c# struct foreach enums

这是FYI的家庭作业。至少谢谢你,看看这个。

因此,我们正在了解enumsList<>IComparable<T>structs,我们正在制作一副纸牌。我有一个卡片结构,说要创建一张卡片,它需要一个等级和套装。我有两个枚举。

我遇到了NewDeck()方法的问题。

我们获得了使用方法头,并给出了一个“使用静态方法GetValues循环遍历所有Rank枚举器”的提示。

我们也获得了foreach循环。我们不应该调用排序,因为循环遍历所有排名应创建已排序的列表。

我无法知道如何将牌添加到牌组中。要添加卡,我想我可能会使用Card.Add,但它没有显示在代码完成中,并且它不是一个选项,我不知道为什么。这是我的卡片结构的代码 -

    namespace Cards
{
    struct Card : IComparable<Card>
    {
        public Suit Suit { get; private set; }
        public Rank Rank { get; private set; }
        public Card(Suit suit, Rank rank) :
            this()
        {
            this.Suit = suit;
            this.Rank = rank;
        }
        public override string ToString()
        {
            return string.Format("{0} {1}", (Char)this.Suit, this.Rank);
        }

        public int CompareTo(Card other)
        {
            return Rank.CompareTo(other.Rank);
        }
    }

    public enum Suit { Spades = 9824, Clubs = 9827, Diamonds = 9830, Hearts = 9829 }

    public enum Rank { Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King };
}

这是我的newDeckMethod()

的代码
public static List<Card>  NewDeck()
        {
            foreach (Cards.Rank r in Enum.GetValues(typeof(Rank)))
               //Card.Add           

        }

2 个答案:

答案 0 :(得分:10)

您需要创建一个列表;现在,您的NewDeck()方法无法定义一个。

public static List<Card> NewDeck() {
    List<Card> deck = new List<Card>();
    foreach (Cards.Rank r in Enum.GetValues(typeof(Rank))) {
        foreach (Cards.Suit s in Enum.GetValues(typeof(Suit))) {
            deck.Add(new Card(s, r));
        }
    }

    return deck;
}

答案 1 :(得分:4)

要获得额外赠送金额,您可以使用LINQ

private static IEnumerable<Card> NewDeck()
{
    IEnumerable<Suit> suits = Enum.GetValues(typeof(Suit)).Cast<Suit>();
    IEnumerable<Rank> ranks = Enum.GetValues(typeof(Rank)).Cast<Rank>();

    return from r in ranks from s in suits select new Card(s, r);
}

如果您需要List<Card>,则可以在返回值上调用ToList() 要按其他方式排序,只需在from r in ranks

之后移动from s in suits即可
相关问题