我不明白第二部分中这个错误背后的逻辑。
当前上下文中不存在名称“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();
}
感谢。
答案 0 :(得分:4)
您所看到的是范围问题。 newMove
在if
或else if
语句中定义,只能在创建变量的任何块中访问。
你可以在上面定义它,但看起来你有两个不同的Types
(Move
和MoveKeyboard
)。如果您可以将它们合并为相同类型,则可以在第一个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();
}