我的函数中有一个布尔值决定了要调用的函数。两个正在播放的函数都称为回放数组。
现在我的眼睛Discard Changes
确实存在,但编译器没有编译,因为它认为它没有设置(不存在)。
如何根据Hex[] areaHexes
的值来调用其中一个功能?
bool semiRandom
答案 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);
}