You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:在Deck类中调用Card类变量出现'cardsuit未定义'报错

问题解决:BlackJack项目中Card类属性无法访问的问题

问题根源分析

你的代码存在几处语法和结构错误,导致编译器无法识别Card类的cardsuit等属性:

  1. 重复定义Card类:Card.cs中先声明了一个空的class Card {},后续又定义了带属性的public class Card,编译器会优先使用第一个无成员的Card类,自然找不到后续定义的属性。
  2. 构造函数位置错误:单独的public Card()构造函数写在了类外部,属于无效代码,无法初始化Card对象的属性。
  3. Deck类的for循环语法错误:外层for循环的起始条件和判断条件之间误用了逗号,应该用分号分隔。
  4. Deck类未归属到目标命名空间:如果Deck.cs不在BlackJack命名空间下,会无法正确引用Card类。

修正后的代码

修正后的Card.cs

namespace BlackJack
{
    public class Card
    {
        public string cardsuit { set; get; }
        public int cardvalue { set; get; }
        public int cardnum { set; get; }

        // 构造函数移至类内部
        public Card()
        {
            cardvalue = -1;
            cardsuit = "";
            cardnum = -1;
        }
    }
}

修正后的Deck.cs

namespace BlackJack
{
    public class Deck
    {
        public List<Card> Cards { set; get; }

        public Deck()
        {
            Cards = new List<Card>();
            revealdeck();
        }

        public void revealdeck()
        {
            Cards.Clear();
            int card_number = 1;

            // 修正for循环语法错误
            for (int e = 1; e < 5; e++)
            {
                for (int f = 1; f < 14; f++)
                {
                    Card cardnow = new Card();
                    cardnow.cardnum = card_number;

                    // 用switch替代多if语句,提升代码可读性
                    switch (e)
                    {
                        case 1:
                            cardnow.cardsuit = "spades";
                            break;
                        case 2:
                            cardnow.cardsuit = "clubs";
                            break;
                        case 3:
                            cardnow.cardsuit = "hearts";
                            break;
                        case 4:
                            cardnow.cardsuit = "diamonds";
                            break;
                    }

                    // 新增:将创建的卡片添加到Deck的Cards列表中
                    Cards.Add(cardnow);
                    card_number++;
                }
            }
        }
    }
}

额外优化建议

  • 可以将cardsuit改为枚举类型(例如enum Suit { Spades, Clubs, Hearts, Diamonds }),避免字符串拼写错误,同时提升类型安全性。
  • 卡片值cardvalue可根据牌面数字直接计算(如J/Q/K对应10,Ace可设为1或11),无需默认赋值为-1。

内容的提问来源于stack exchange,提问作者danrutley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:30:56