1

我收到以下错误:

无法将“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;
    }
4

3 回答 3

2

_Bots.Values是一个集合,virtualBot你的代码应该是

foreach (virtualBot roomBot in _Bots.Values)
{                    
    if (roomBot.goalX == -1)
        continue;
于 2013-07-22T02:27:29.923 回答
0

你应该修改你的foreach语句如下:

foreach (virtualBot roomBot in _Bots.Values)

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

foreach (var roomBot in _Bots.Values)

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

于 2013-07-22T02:52:42.917 回答
0

看看这段代码:

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

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

上面的代码将给出“无法将'A'类型的对象转换为'B'类型”。您的代码示例也发生了同样的事情。

如果您实例化 a virtualBot,则不能将其强制转换为virtualRoomBot.

你应该让一个类继承另一个。然后,按照我在下面的代码中显示的方向进行强制转换:

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

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

这应该有效。希望能帮助到你。此致

于 2013-07-22T03:03:06.377 回答