C# - 在查看基本实例列表时,如何查看某个实例的子类?

C# - How do I see what subclass a certain instance is when looking through a list of base instances?

我正在使用 XNA 开发一款游戏作为学校项目。我正在尝试在我的 "Entity" 基础 class 中创建一个代码,用于检查我当前与 "Entity" 的哪个特定子 class 发生碰撞。

这是我到目前为止一直在尝试使用的:

在"Entity"

 protected Entity CheckCollisionWithEntity(Vector2 pos)
    {
        Rectangle r = new Rectangle((int)pos.X, (int)pos.Y, _texture.Width, _texture.Height - 1);

        foreach (Entity e in _entities)
        {
            if (r.Intersects(e.Collider))
            {
                if(e != this)
                return e;
            }

        }

        return null;
    }

in "Player"(就像 "Enemy","Entity" 的子class)

  if (CheckCollisionWithEntity(Position) is Enemy)
        {
            Game1.instance.reloadLevel();
        }

我的问题是,当我与一个 "Enemy" 实例发生碰撞时,没有任何反应。 我知道 "reloadLevel()" 方法有效,我已经尝试将其切换为调试代码。 我在这里做错了什么?我误解了 "is" 参考吗? 敌人对撞机正在为其他不太具体的碰撞检查类型工作。

这就是is的用法,所以返回的对象不能是Enemy对象。

你说你交换了调试代码 - 你是否验证过该方法确实返回了一个对象,该对象是或派生自 Enemy?单步执行您的代码并检查返回的内容 - 也许您的碰撞检测代码不起作用并且您总是返回 nullnull is someClass 将始终评估为 false)。您的方法 returns 仅将第一个 Entity 确定为碰撞 - 是否可以在任何 Enemy 实体之前检测到非 Enemy 实体?