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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:24:49