基于布尔值调用不同的函数

时间:2018-03-16 18:55:38

标签: c#

我的函数中有一个布尔值决定了要调用的函数。两个正在播放的函数都称为回放数组。

现在我的眼睛Discard Changes确实存在,但编译器没有编译,因为它认为它没有设置(不存在)。

如何根据Hex[] areaHexes的值来调用其中一个功能?

bool semiRandom

3 个答案:

答案 0 :(得分:10)

它不起作用的原因是你当前正在声明两个名为areaHexes的局部变量,每个变量都有一个范围,它只是它们声明的块 - 所以当你没有它们在范围内时尝试使用它们。

Brandon的回答(在if语句之外声明变量然后从不同的地方分配它)将正常工作 - areaHexes现在在您稍后使用时的范围内。但是,您可以使用条件?:operator:

更简单地完成此操作
Hex[] areaHexes = semiRandom
    ? GetSemiRandomHexesWithinRangeOf(centerHex, range)
    : GetHexesWithinRangeOf(centerHex, range);

答案 1 :(得分:5)

您的areaHexes已在if-else块中进行本地声明,但在这些块的范围之外不可见。您有两个不同的本地areaHexes变量:

if (semiRandom) 
{
    // This definition of areaHexes is visible only within these { }
    //   and is not the same as the one in the else block below
    Hex[] areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
} 
else
{
    // This definition of areaHexes is visible only within these { }
    //   and is not the same one as the one above
    Hex[] areaHexes = GetHexesWithinRangeOf(centerHex, range);
}

在外面宣布:

Hex[] areaHexes;

if (semiRandom) { 
    areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
}
else {
    areaHexes = GetHexesWithinRangeOf(centerHex, range);
}

或者,使用Jon显示的三级?:运算符。

您应该为C#查找变量范围规则

答案 2 :(得分:3)

在你的条件之前声明你的数组,如下所示:

Hex[] areaHexes;

if (semiRandom) 
{ 
    areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
} 
else
{
    areaHexes = GetHexesWithinRangeOf(centerHex, range);
}