CS0266错误:数值过大导致num=4分支代码无法运行该如何修复?
报错原因
CS0266报错本质是类型不匹配导致的隐式转换失败,你这个场景核心是32位有符号整数溢出:
- C# 中
int类型为32位有符号整数,最大值仅为2147483647 - num=3逻辑里用到的最大数值是2000000000,刚好低于int最大值,所以能正常运行
- num=4逻辑里的判断阈值、扣减数值都是5000000000,远超过int最大值,无法用int类型存储,编译时就会抛出类型转换错误,同时
PlayerPrefs.SetInt仅支持存储32位int,也会触发存储异常。
修复方案
1. 修改变量类型
把GameManager类中的o2和multiplier两个字段的类型从int改为long(64位有符号整数,最大值为9e18,完全满足你的数值需求)。
2. 替换PlayerPrefs存储逻辑
PlayerPrefs原生不支持直接存long类型,推荐转成字符串存储,对应代码修改如下:
// num==3逻辑(仅调整存储逻辑) { GameManager.multiplier += 20000000; GameManager.o2 -= 2000000000; PlayerPrefs.SetString("o2", GameManager.o2.ToString()); PlayerPrefs.SetString("multiplier", GameManager.multiplier.ToString()); } // num==4逻辑(数值后加L标记为long类型) if (num == 4 && GameManager.o2 >= 5000000000L) { GameManager.multiplier += 90000000; GameManager.o2 -= 5000000000L; PlayerPrefs.SetString("o2", GameManager.o2.ToString()); PlayerPrefs.SetString("multiplier", GameManager.multiplier.ToString()); }
3. 调整读取逻辑
对应修改GameManager初始化时读取存储值的逻辑,把字符串转回long:
// 原读取逻辑替换为如下代码 GameManager.o2 = long.TryParse(PlayerPrefs.GetString("o2", "0"), out long o2Val) ? o2Val : 0; GameManager.multiplier = long.TryParse(PlayerPrefs.GetString("multiplier", "0"), out long mulVal) ? mulVal : 0;
内容的提问来源于stack exchange,提问作者Mark Garai
相关产品推荐
相关产品推荐

