返回2个值时在C#中检测到无法访问的代码

时间:2018-10-17 10:02:28

标签: visual-studio unity3d

public int Number;
public int NumberTwo;
int GiveDouble() {
    return Number * 3;
    return NumberTwo * 5; // compiler says this is unreachable
}
void Start() {
    int returnedNumber = GiveDouble();
    // ...
    int returnedNumber2 = GiveDouble();
    // ...
}

image

我试图将一个函数的2个值返回到另一个函数的2个不同的变量。

在这种情况下...我正在从GiveDouble()函数向ReturnedNumber函数中的变量ReturnedNumber2Start()发送2个值。输入在UNIY engine中给出。

请检查我添加的图片。弹出窗口显示在第二个返回函数中检测到无法访问的代码。

我的问题可能不太合理。我现在还在学习。我想知道为什么会这样吗?

2 个答案:

答案 0 :(得分:5)

编译器是正确的;一个调用只能返回一个值。您正在调用方法两次,但这不是恢复方法-它从头开始再次调用它,因此每次都会返回第一个结果。 / p>

这里的一个选项可以是“值元组”:

    (int, int) GiveDouble()
    {
        return (Number * 3, NumberTwo * 5);
    }
    void Start()
    {
        (int returnedNumber, int returnedNumber2) = GiveDouble();
    }

或在元组上使用更好的命名方式:

    (int Foo, int Bar) GiveDouble()
    {
        return (Number * 3, NumberTwo * 5);
    }

答案 1 :(得分:1)

为清楚起见,当您说return Number * 3;时,您在该处结束该方法,然后返回Number * 3。 return使编译器退出该方法并继续前进,因此基本上就像说您已完成该方法一样,这就是代码不可访问的原因。

int GiveDouble() {
    return Number * 3;
    return NumberTwo * 5; // compiler says this is unreachable
}

删除并尝试

int TimesThree(int one){
return one*3;
}
int TimesFive(int two){
return two*5;
}

然后更改:

   int returnedNumber = GiveDouble();
    // ...
    int returnedNumber2 = GiveDouble();

    int returnedNumber = TimesThree(Number);
    // ...
    int returnedNumber2 = TimesFive(NumberTwo);