System.InvalidCastException:无法强制转换类型为的对象
本文关键字:类型 转换 对象 InvalidCastException System | 更新日期: 2023-09-27 18:24:05
我得到以下错误:
无法将"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
。
您应该使一个类继承另一个类。然后,按照我在下面代码中显示的方向进行强制转换:
public class A { }
public class B : A { }
A a = new B();
B b = (B)a;
这应该有效。希望能有所帮助。向致以最良好的问候