簡體   English   中英

System.InvalidCastException:無法轉換類型的對象

[英]System.InvalidCastException: Unable to cast object of type

我收到以下錯誤:

無法將“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;
    }

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

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

您應該修改您的foreach語句,如下所示:

foreach (virtualBot roomBot in _Bots.Values)

或者你可以省略顯式類類型,只使用隱式類型var

foreach (var roomBot in _Bots.Values)

我還懷疑,既然你是專門測試roomBox.goalX的值,你可能實際上是在錯誤的列表上進行迭代。 你真的想要迭代_Bots.Values嗎? 也許你有一個_RoomBots.Values

看看這段代碼:

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

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

上面的代碼將給出“無法將'A'類型的對象強制轉換為'B'類型。” 您的代碼示例也會發生同樣的事情。

如果您實例化virtualBot ,則不能將其virtualRoomBotvirtualRoomBot

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

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

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

這應該有效。 希望能幫助到你。 最好的祝福

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM