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

C# 基于布尔值调用不同的函数,c#,C#,我的函数中有一个布尔值,它决定调用哪个函数。调用的两个函数都返回一个数组 现在在我看来,Hex[]areaHexes确实存在,但是编译器没有编译,因为它认为它没有设置(不存在) 如何根据bool semiRandom的值正确调用这两个函数中的一个 void ElevateArea(int q, int r, int range, bool semiRandom = false, float centerHeight = 1f) { Hex centerHex = GetHexAt(q,

我的函数中有一个布尔值,它决定调用哪个函数。调用的两个函数都返回一个数组

现在在我看来,
Hex[]areaHexes
确实存在,但是编译器没有编译,因为它认为它没有设置(不存在)

如何根据
bool semiRandom
的值正确调用这两个函数中的一个

void ElevateArea(int q, int r, int range, bool semiRandom = false, float centerHeight = 1f)
{
    Hex centerHex = GetHexAt(q, r);

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

    foreach (Hex h in areaHexes)
    {
        //if (h.Elevation < 0)
            // h.Elevation =  0;

        h.Elevation += 0.5f * Mathf.Lerp(1f, 0.25f, Hex.Distance(centerHex, h ) / range);
    }
}
void ElevateArea(整数q、整数r、整数范围、布尔半随机=false、浮动中心高度=1f)
{
Hex centerHex=GetHexAt(q,r);
if(半随机)
{ 
Hex[]areaHexes=GetSemiRandomHexesWithinRangeOf(中心Hex,范围);
} 
其他的
{
Hex[]Area Hexes=范围内的GetHexes(中心Hex,范围);
}
foreach(区域内的六角h六角)
{
//如果(高度<0)
//h.高程=0;
h、 标高+=0.5f*Mathf.Lerp(1f,0.25f,六角距离(中心六角,h)/范围);
}
}

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

Hex[] areaHexes;

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

它不起作用的原因是,您当前正在声明两个名为
areaHexes
的局部变量,每个局部变量都有一个作用域,该作用域正是它们声明所在的块,因此在您尝试使用它们时,它们都不在作用域内

Brandon的回答(将变量声明在
if
语句之外,然后从不同的位置分配给它)将很好地工作-
areaHexes
现在在您以后使用它的范围内。但是,您可以使用条件?:运算符更简单地执行此操作:

Hex[] areaHexes = semiRandom
    ? GetSemiRandomHexesWithinRangeOf(centerHex, range)
    : GetHexesWithinRangeOf(centerHex, range);

您的
areaHexes
正在您的
块内本地声明,如果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#的可变范围规则。

您的
areaHexes
正在
块中本地声明,如果else
块,则在这些块的范围之外不可见。在外部声明:
Hex[]区域hexes然后
如果(半随机){areaHexes=…}…
等。改为这样做。它看起来更漂亮。