You need to enable JavaScript to run this app. 替代多分支else if的高效实现 C#控制台游戏敌人随机名生成
优惠活动
大模型
产品
解决方案
定价
更多

替代多分支else if的高效实现 C#控制台游戏敌人随机名生成

无需沿用大量else if写法,用「名字池+随机索引」的方案是最适合该场景的实现

方案核心特点

  • 彻底消除冗余分支判断,后续扩展敌人名字仅需向列表追加条目,不需要修改任何判断逻辑
  • 规避你现有代码的隐藏问题:在方法内部每次实例化Random,会因短时间内系统时钟种子一致,生成重复的随机值
  • 逻辑与配置数据完全分离,后续调整名字列表、修改生成规则都不会影响核心流程

具体实现

先在游戏类的全局作用域定义两个字段,不要把随机数生成器和名字列表塞在chooseName方法内部:

// 全局唯一的随机数生成器,避免重复实例化导致的随机值重复问题
private readonly Random _randomGenerator = new Random();
// 敌人名字池,所有可生成的名字都存在这里,增删名字直接修改这个列表即可
private readonly List<string> _enemyNamePool = new List<string>()
{
    "洞穴哥布林",
    "游荡骷髅兵",
    "森林狼人",
    "熔岩史莱姆",
    "荒野强盗",
    "深海塞壬",
    "古墓食尸鬼",
    "峡谷鹰身女妖",
    "暗影刺客",
    "迷路的旅行者" // 对应原逻辑中else分支的兜底名称
};

原chooseName方法可简化到几行,完全不需要任何分支判断:

string chooseName()
{
    // 直接生成覆盖名字池长度范围的随机索引,取对应位置的名字即可
    int randomIndex = _randomGenerator.Next(_enemyNamePool.Count);
    return _enemyNamePool[randomIndex];
}

扩展适配

如果后续需要配置不同名字的出现权重(比如稀有名字生成概率低、普通名字生成概率高),依然不需要写分支判断:仅需要给每个名字对应配置权重值,封装通用的随机权重选择逻辑即可,增删名字、调整概率都只需要修改配置项,完全不涉及分支代码的维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 16:45:06