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

Unity C# switch语句模式匹配语法疑问与正确用法咨询

关于C# switch模式匹配语法的问题解答

1. 模式变量的赋值逻辑

你在case后声明的int类型临时变量,会自动被赋值为switch括号中传入的判断值,不需要手动赋值。比如你写case int a when a < 40,这里的a的取值就等于你switch传入的captureStartingHealth的值,本质是C#模式匹配语法为了简化判断做的语法糖。

2. 直接用原变量报错的原因

你报错的原因是不符合C# switch模式匹配的语法规则:case关键字后必须先指定匹配模式,不能直接跟when条件判断。你之前想直接写case when captureStartingHealth <40不符合语法要求,才会触发报错。
如果你不想声明额外的临时变量,可以用弃元模式_来占位,就可以直接在when后使用原变量,不需要额外声明新变量。

3. 正确写法示例

写法1:用弃元模式,直接使用原变量(无需声明新临时变量)

void AssignmentSwitchStatement()
{
    switch (captureStartingHealth)
    {
        // 弃元_表示匹配任意int值,后面直接跟自定义判断条件
        case _ when captureStartingHealth < 40:
            behaviour = Behaviour.SUPPORT;
            roll = Random.Range(0, 101);
            IncrementSupportRollChances();
            break;
        default:
            roll = Random.Range(0, 101);
            DefaultRollChances();
            break;
    }
}

写法2:用模式变量简化写法(不需要调用原变量名)

void AssignmentSwitchStatement()
{
    switch (captureStartingHealth)
    {
        // 这里hp自动等于captureStartingHealth的取值
        case int hp when hp < 40:
            behaviour = Behaviour.SUPPORT;
            roll = Random.Range(0, 101);
            IncrementSupportRollChances();
            break;
        default:
            roll = Random.Range(0, 101);
            DefaultRollChances();
            break;
    }
}

额外提示

你原有代码里的判断条件captureStartingHealth < (float)captureStartingHealth逻辑无效,int类型转float不会改变数值大小,这个条件永远不会命中,需要替换成你实际要判断的数值阈值比如40。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:09:00