![](/img/trans.png)
[英]System.InvalidCastException: Unable to cast object of type x to type y
[英]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
,則不能將其virtualRoomBot
為virtualRoomBot
。
你應該讓一個類繼承另一個。 然后,按照我在下面的代碼中顯示的方向進行轉換:
public class A { }
public class B : A { }
A a = new B();
B b = (B)a;
這應該有效。 希望能幫助到你。 最好的祝福
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.