Unity C#使用多变量switch语句时出现Error CS0019的求助
错误原因
CS0019 错误的核心问题是C#不支持链式比较语法(如 -7.445 < xPos < -6.795)。这种写法会被解析为 (-7.445 < xPos) < -6.795,也就是把第一个比较得到的布尔值和double类型的数值做比较,这在语法上是不允许的。必须拆分为两个独立的比较,用&&连接。
同时,你使用元组(xPos, yPos)作为switch的判断对象时,case的语法不正确,需要用when子句来定义元组元素的条件。
修正后的代码
以下是直接修复错误的switch写法:
switch ((xPos, yPos)) { case var (x, y) when (-7.445 < x && x < -6.795) && (3.45 < y && y < 4.15): xPos = -7.12; yPos = 3.805; break; case var (x, y) when (-7.445 < x && x < -6.795) && (2.65 < y && y < 3.35): xPos = -7.12; yPos = 3.005; break; case var (x, y) when (-7.445 < x && x < -6.795) && (1.85 < y && y < 2.55): xPos = -7.12; yPos = 2.205; break; case var (x, y) when (-7.445 < x && x < -6.795) && (1.05 < y && y < 1.75): xPos = -7.12; yPos = 1.405; break; case var (x, y) when (-7.445 < x && x < -6.795) && (0.25 < y && y < 0.95): xPos = -7.12; yPos = 0.605; break; case var (x, y) when (-7.445 < x && x < -6.795) && (-0.55 < y && y < 0.15): xPos = -7.12; yPos = -0.195; break; case var (x, y) when (-7.445 < x && x < -6.795) && (-1.35 < y && y < -0.65): xPos = -7.12; yPos = -0.995; break; case var (x, y) when (-7.445 < x && x < -6.795) && (-2.15 < y && y < -1.45): xPos = -7.12; yPos = -1.795; break; case var (x, y) when (-7.445 < x && x < -6.795) && (-2.95 < y && y < -2.25): xPos = -7.12; yPos = -2.595; break; case var (x, y) when (-7.445 < x && x < -6.795) && (-3.75 < y && y < -3.05): xPos = -7.12; yPos = -3.395; break; case var (x, y) when (-7.445 < x && x < -6.795) && (-4.55 < y && y < -3.85): xPos = -7.12; yPos = -4.195; break; }
优化写法
观察代码可以发现,所有case的xPos范围完全相同,且都会将xPos设置为-7.12。可以先单独判断x的条件,再处理y的逻辑,避免重复代码:
if (-7.445 < xPos && xPos < -6.795) { xPos = -7.12; switch (yPos) { case var y when 3.45 < y && y < 4.15: yPos = 3.805; break; case var y when 2.65 < y && y < 3.35: yPos = 3.005; break; case var y when 1.85 < y && y < 2.55: yPos = 2.205; break; case var y when 1.05 < y && y < 1.75: yPos = 1.405; break; case var y when 0.25 < y && y < 0.95: yPos = 0.605; break; case var y when -0.55 < y && y < 0.15: yPos = -0.195; break; case var y when -1.35 < y && y < -0.65: yPos = -0.995; break; case var y when -2.15 < y && y < -1.45: yPos = -1.795; break; case var y when -2.95 < y && y < -2.25: yPos = -2.595; break; case var y when -3.75 < y && y < -3.05: yPos = -3.395; break; case var y when -4.55 < y && y < -3.85: yPos = -4.195; break; } }
内容的提问来源于stack exchange,提问作者TinyManager
相关产品推荐
相关产品推荐

