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

如何根据方法参数动态切换目标列表并获取对应生长时间?

问题分析与解决方法

你当前代码的核心问题是:$"{crop}Data"只是拼接出了一个字符串(比如输入"wheat"时得到"wheatData"),但这个字符串并不是对同名列表变量的引用。你调用[0]时,实际是取了字符串第一个字符的ASCII码值(比如"wheatData"的第一个字符是'w',对应ASCII码119),这和你想要访问列表第一个元素的需求完全不符。

下面是几种可行的实现方式:

1. 使用字典映射(推荐)

把作物名称和对应的生长数据列表关联起来,通过字典快速查找,代码简洁且易维护:

// 在类中定义字典(可以提前初始化好所有作物的数据)
private Dictionary<string, List<int>> _cropGrowthMap = new Dictionary<string, List<int>>()
{
    {"wheat", new List<int> {60, 120, 180}}, // 第一个元素是你要的生长时间60
    {"corn", new List<int> {90, 150, 210}},
    // 其他作物的数据依次添加
};

public int GetGrowthTime(string crop)
{
    // 尝试从字典中获取对应作物的数据
    if (_cropGrowthMap.TryGetValue(crop, out var growthData))
    {
        return growthData[0]; // 返回生长时间
    }
    
    // 处理找不到作物的情况
    Debug.LogError($"未找到作物 {crop} 的生长数据");
    return -1; // 返回一个无效值,根据需求调整
}

2. 使用Switch-Case分支

如果作物种类不多,可以用分支语句直接判断:

// 假设你已经定义了各个作物的列表变量
private List<int> wheatData = new List<int> {60, ...};
private List<int> cornData = new List<int> {90, ...};

public int GetGrowthTime(string crop)
{
    switch (crop)
    {
        case "wheat":
            return wheatData[0];
        case "corn":
            return cornData[0];
        // 添加其他作物的case
        default:
            Debug.LogError($"未知作物类型:{crop}");
            return -1;
    }
}

不推荐的方式:反射

虽然可以通过反射根据字符串名字获取变量,但这种方式代码复杂、性能差,还容易出错,除非特殊场景,否则不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:00:03