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
相关产品推荐
相关产品推荐

