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

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' にキャストできません。」コードのサンプルでも同じことが起こっています。

をインスタンス化する場合virtualBot、単にキャストすることはできませんvirtualRoomBot

あるクラスを別のクラスに継承させる必要があります。次に、以下のコードに示す方向にキャストします。

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

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

これはうまくいくはずです。それが役に立てば幸い。よろしくお願いします

于 2013-07-22T03:03:06.377 に答える