求助:在Deck类中调用Card类变量出现'cardsuit未定义'报错
问题解决:BlackJack项目中Card类属性无法访问的问题
问题根源分析
你的代码存在几处语法和结构错误,导致编译器无法识别Card类的cardsuit等属性:
- 重复定义Card类:Card.cs中先声明了一个空的
class Card {},后续又定义了带属性的public class Card,编译器会优先使用第一个无成员的Card类,自然找不到后续定义的属性。 - 构造函数位置错误:单独的
public Card()构造函数写在了类外部,属于无效代码,无法初始化Card对象的属性。 - Deck类的for循环语法错误:外层for循环的起始条件和判断条件之间误用了逗号,应该用分号分隔。
- 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
相关产品推荐
相关产品推荐

