2013-07-22 33 views
0

,我發現了以下錯誤的對象:System.InvalidCastException:無法投類型

Unable to cast object of type 'Holo.Virtual.Rooms.Bots.virtualBot' to type 'Holo.Virtual.Rooms.Bots.virtualRoomBot'.

這裏是我的代碼:

foreach (virtualRoomBot roomBot in _Bots.Values) // Exception thrown here 
{      
    if (roomBot.goalX == -1) 
     continue; 

Holo.Virtual.Rooms.Bots.virtualBot包含:

public class virtualBot 
{ 
    public virtualBot(int botID) 
    { 
     DataRow dRow; 
     using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) 
     { 
      dRow = dbClient.getRow("SELECT * FROM roombots WHERE id = '" + botID + "'"); 
     } 
     *There are values for the db here* 
    } 
} 

而且Holo.Virtual.Rooms.Bots.virtualRoomBot包含:

public class virtualRoomBot 
{ 
    internal virtualRoomBot(int botID, int roomID, int roomUID, 
     virtualBot Bot, virtualRoomBotStatusManager statusManager) 
    { 
     this.botID = botID; 
     this.roomID = roomID; 
     this.roomUID = roomUID; 
     this.Bot = Bot; 
     this.statusManager = statusManager; 
    } 
+0

'virtualBot'和'virtualRoomBot'是兩種不同和不相關的類型。你不能直接從一個投向另一個。如果'_Bots.Values'包含一個'virtualBot'類型的對象的集合,那麼你不能把它看作你正在嘗試做的'virtualRoomBot'類型的對象的集合。除此之外,目前還不清楚你想要做什麼或者你在哪裏獲得'_Bots.Values'。 – David

回答

2

_Bots.ValuesvirtualBot集合,你的代碼應該是

foreach (virtualBot roomBot in _Bots.Values) 
{      
    if (roomBot.goalX == -1) 
     continue; 
0

您應按如下修改foreach聲明:

foreach (virtualBot roomBot in _Bots.Values) 

或者你可以省略明確的類的類型,只是使用隱式var

foreach (var roomBot in _Bots.Values) 

我還懷疑,由於您正在專門測試roomBox.goalX的值,因此您可能實際上正在迭代錯誤的列表中。你實際上是否意味着重複_Bots.Values?也許你有一個_RoomBots.Values

0

看這個代碼:

public class A { } 
public class B : A { } 

A a = new A(); 
B b = (B)a; 

此代碼以上會給「無法轉換類型的對象‘A’爲類型‘B’」。您的代碼示例也會發生同樣的情況。

如果你實例化一個virtualBot,你不能將它投射到virtualRoomBot

你應該讓一個類繼承另一個類。然後,按照我在下面的代碼中顯示的方向進行投射:

public class A { } 
public class B : A { } 

A a = new B(); 
B b = (B)a; 

這應該有效。希望能幫助到你。 致以問候

相關問題