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

S.V*_*ser -1 c#

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

现在在我眼里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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

它不工作的原因是你当前声明了两个调用的局部变量areaHexes,每个变量都有一个范围,它只是它们声明的块 - 所以当你尝试使用它们时它们都不在范围内.

布兰登的答案(在声明之外声明变量if然后从不同的地方分配它)将正常工作 - areaHexes现在在你以后使用它时的范围.但是,您可以使用条件?:运算符更简单地执行此操作:

Hex[] areaHexes = semiRandom
    ? GetSemiRandomHexesWithinRangeOf(centerHex, range)
    : GetHexesWithinRangeOf(centerHex, range);
Run Code Online (Sandbox Code Playgroud)

  • 这样做.它看起来更美丽. (2认同)

lur*_*ker 5

areaHexesif-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);
}
Run Code Online (Sandbox Code Playgroud)

在外面声明:

Hex[] areaHexes;

if (semiRandom) { 
    areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
}
else {
    areaHexes = GetHexesWithinRangeOf(centerHex, range);
}
Run Code Online (Sandbox Code Playgroud)

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

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