System.InvalidCastException:无法转换类型的对象

时间:2013-07-22 02:25:43

标签: c# object foreach .net

我收到以下错误:

  

无法转换类型为' Holo.Virtual.Rooms.Bots.virtualBot'的对象输入' 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;
    }

3 个答案:

答案 0 :(得分:2)

_Bots.ValuesvirtualBot的集合,您的代码应为

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

答案 1 :(得分:0)

您应该修改foreach语句,如下所示:

foreach (virtualBot roomBot in _Bots.Values)

或者您可以省略显式类类型,只使用隐式类型var

foreach (var roomBot in _Bots.Values)

我还怀疑,既然你是专门测试roomBox.goalX的值,你实际上可能会在错误的列表上完全迭代。你真的想要在_Bots.Values上进行迭代吗?也许你有一个_RoomBots.Values

答案 2 :(得分: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;

这应该有效。希望能帮助到你。 最好的问候