在这种情况下,“X”不存在

时间:2014-08-29 17:48:50

标签: c# xna

我不明白第二部分中这个错误背后的逻辑。

当前上下文中不存在名称“newMove”。

是不是在第一部分的上面定义了?

            //First section
            if (base.IsPlayer1 == true)
            {
                Move newMove = moveList.Detect();
            }
            else if (base.IsPlayer1 == false)
            {
                MoveKeyboard newMove = moveListKeyboard.DetectMove();
            }

            //Second section
            if (newMove != null)
            {
                 PlayMove();
            }

感谢。

4 个答案:

答案 0 :(得分:4)

您所看到的是范围问题。 newMoveifelse if语句中定义,只能在创建变量的任何块中访问。

可以在上面定义它,但看起来你有两个不同的TypesMoveMoveKeyboard)。如果您可以将它们合并为相同类型,则可以在第一个if语句之上使用单个定义。

答案 1 :(得分:2)

是,已定义,但仅适用于范围。由于第二个块在范围之外,因此您无法使用它。

范围由大括号({})定义,一段代码可以访问其范围内的任何变量,它位于内的每个范围。

       //Function scope
       //First section
        if (base.IsPlayer1 == true)
        {
            //If block scope
            Move newMove = moveList.Detect();
        }
        else if (base.IsPlayer1 == false)
        {
            // else if block scope
            MoveKeyboard newMove = moveListKeyboard.DetectMove();
        }

        //Function scope again, newMove is not available.
        //Second section
        if (newMove != null)
        {
             PlayMove();
        }

答案 2 :(得分:1)

作用域。在C#中,变量仅在定义的范围内有效。大括号{ }表示范围块。

如果将newMove的定义移到if语句之前,它就会起作用。

此外,由于您在两个不同的范围中定义newMove,并且有两种不同的类型,因此您必须更改某些内容。

答案 3 :(得分:1)

你应该做的就是将newmove的声明移到if else语句之外,如下所示:

object newmove;
if (base.IsPlayer1 == true)
{
   newMove = moveList.Detect();
}
else
{
   newMove = moveListKeyboard.DetectMove();
}

//Second section
if (newMove != null)
{
   PlayMove();
}