2014-08-29 38 views
2

我不明白第二部分中此錯誤背後的邏輯。在此情況下「X」不存在

名稱'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

你所看到的是一個範圍問題。 newMoveifelse if語句中定義,並且只能在創建變量的塊內進行訪問。

可以上述定義它,但它看起來像你有兩個不同的TypesMoveMoveKeyboard)。如果您可以將這些合併爲同一類型,則可以在第一個if聲明之上有一個單一的定義。

+0

這是主要的問題。我無法管理它們在同一類型中的合併。但如果這是唯一的解決方案,我會繼續嘗試。 – Pilispring 2014-08-29 17:58:06

+0

兩者有什麼區別?您可以在每個基本基類相同的地方使用繼承。除此之外,您需要定義兩個單獨的變量並在第二部分中測試每個變量。 – MikeH 2014-08-29 17:59:36

+0

@Pilispring我不一定會推薦它,但是你可以使'newMove'' dyanmic'。 – BradleyDotNET 2014-08-29 18:09:50

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(); 
     } 
1

範圍界定。在C#中,變量只在其定義的範圍內有效。大括號,{ }表示範圍塊。

如果您將newMove的定義移動到if語句之前,它將起作用。

另外,由於您在兩個不同的作用域中定義了newMove,因此有兩種不同類型,您必須更改某些內容。

1

所有你應該做的是對的newmove的declration移動到這樣的if else語句外:

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

//Second section 
if (newMove != null) 
{ 
    PlayMove(); 
} 
相關問題