首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当创建另一个类的对象时,Foreach循环崩溃

当创建另一个类的对象时,Foreach循环崩溃
EN

Stack Overflow用户
提问于 2019-05-31 06:37:42
回答 1查看 60关注 0票数 0

我正在为一个学校项目做一个游戏,我遇到了一个问题。老师要求我在代码中使用多态性,所以基本上,我有两个类,X和Y,它们继承自抽象基类K。

我有一个K个对象的列表,这样X和Y的对象就可以放在列表中。所以问题是,我想用foreach循环遍历列表,但只检查X对象。

foreach ( X object in list)... 

一旦创建了一个X对象,游戏就会崩溃,我不明白为什么!

foreach (GoldCoin gc in powerUps.ToList())
{
    if (gc.IsAlive)
    {
        player.speedY = 3;
    }
    else
    {
        powerUps.Remove(gc);
    } 

错误消息显示

System.InvalidCastException:‘无法将类X的对象转换为类Y。’

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 06:53:45

从伪代码看,似乎是强制列表中的每个对象都是X类型的对象。但是,如果列表中还包含Y类型的对象,则不能将该对象分配给X的实例

假设您的类是:

class K
{
    public int value {get;set;}

}

class X : K
{ 
    public string Name { get; set; }
}
class Y : K
{ 
    public decimal money { get; set; }
}

void Main()
{
    List<K> elements = new List<K>();
    elements.Add(new X { Name = "Steve" });
    elements.Add(new Y {money = 100});

    // This cannot work, the second element is a Y and doesn't have a Name property
    // foreach(X obj in elements)
    //     Console.WriteLine(obj.Name);

    // This works because only elements of type X are retrieved by the enumeration
    foreach(X obj in elements.OfType<X>())
       Console.WriteLine(obj.Name);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56386479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档