Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C使用foreach创建一副牌_C#_Struct_Foreach_Enums - Fatal编程技术网

C# C使用foreach创建一副牌

C# C使用foreach创建一副牌,c#,struct,foreach,enums,C#,Struct,Foreach,Enums,这是家庭作业,仅供参考。谢谢你至少看看这个 所以我们正在学习枚举、列表、IComparable和结构,我们正在创建一副卡片。我有一个卡片结构,上面说要创建一张卡片,它需要一个等级和套装。我两个都有枚举 我在使用NewDeck方法时遇到了问题 我们得到了要使用的方法头,并得到了使用静态方法GetValues循环遍历所有秩枚举数的提示 我们还得到了foreach循环。我们不应该调用排序,因为在所有列中循环应该创建一个已经排序的列表 我不知道如何在牌组中添加牌。要添加卡片,我想我可能会使用Card.a

这是家庭作业,仅供参考。谢谢你至少看看这个

所以我们正在学习枚举、列表、IComparable和结构,我们正在创建一副卡片。我有一个卡片结构,上面说要创建一张卡片,它需要一个等级和套装。我两个都有枚举

我在使用NewDeck方法时遇到了问题

我们得到了要使用的方法头,并得到了使用静态方法GetValues循环遍历所有秩枚举数的提示

我们还得到了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 };
}
这是我的NewDeck方法的代码

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

        }

您需要创建一个列表;现在你的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;
}

要获得额外的积分,您可以使用LINQ

如果你需要它作为一个列表,你可以在返回值上调用ToList。 从另一个角度来说,只需依次从r排到s排

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);
}