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

C#扑克牌类问题求助:如何通过cardValue自动生成description

问题分析与修复方案

原代码核心问题

  1. Description属性逻辑完全错误:你把根据Cardvalue生成牌名的逻辑写在了set方法里,但set方法只有在外部给Description赋值时才会触发(比如card.Description = "test"),而你的需求是让Description自动跟随Cardvalue变化,所以这个逻辑永远不会执行,description字段始终是默认的null。
  2. Random实例重复创建:每个Card实例初始化时都新建一个Random对象,短时间内创建多张牌会因为系统时钟精度问题,生成大量重复的随机牌值。

修复方案一:只读Description,直接在Getter中计算

这是最简洁的实现方式,因为Description完全由Cardvalue决定,不需要单独存储,每次获取时直接计算返回:

class Card
{
    // 全局共用一个Random实例,避免重复创建导致的重复随机数
    private static readonly Random _random = new Random();
    
    public int Cardvalue { get; private set; }

    // 通过构造函数初始化牌值
    public Card()
    {
        Cardvalue = _random.Next(1, 14);
    }

    // Description为只读属性,根据Cardvalue动态生成牌名
    public string Description
    {
        get
        {
            // 使用C# 8.0+的switch表达式,比传统switch更简洁
            return Cardvalue switch
            {
                11 => "Jack",
                12 => "Queen",
                13 => "King",
                // 1-10直接转字符串
                _ => Cardvalue.ToString()
            };
        }
    }
}

修复方案二:Cardvalue变更时同步更新Description

如果后续需要支持修改牌值(比如某些特殊游戏规则),可以在Cardvalue的set方法里同步更新description字段:

class Card
{
    private static readonly Random _random = new Random();
    private int _cardValue;
    private string _description;

    public int Cardvalue
    {
        get => _cardValue;
        private set
        {
            _cardValue = value;
            // 牌值变更时立即更新描述
            _description = value switch
            {
                11 => "Jack",
                12 => "Queen",
                13 => "King",
                _ => value.ToString()
            };
        }
    }

    // Description直接返回预存的字段,性能略高(差异可忽略)
    public string Description => _description;

    public Card()
    {
        Cardvalue = _random.Next(1, 14);
    }
}

测试验证

创建Card实例后,直接访问Description就能得到正确的牌名:

Card card = new Card();
Console.WriteLine($"牌值:{card.Cardvalue},牌名:{card.Description}");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:16:11