2013-07-22 32 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; 

这应该有效。希望能帮助到你。 致以问候

相关问题