C#无效的Cast异常(我不知道错误在哪里)

时间:2016-03-05 00:28:43

标签: c# out

所以,我用这个方法来检测当按下按钮时玩家面前是否有任何东西,问题是,即使是没有out参数的同样方法也很难(它返回任何在玩家面前的人)似乎工作,这个抛出一个无效的强制转换异常,即使我研究了我仍然不知道这里有什么问题。

有问题的功能代码:

public bool isThereAnythingThere(Rectangle rec, out NPC other) {
    bool tmp = false;
    other = null;

    foreach (NPC npc in gol)
    {
        if (npc.collider.Intersects(rec))
        {
            tmp = true;
            other = npc;
        }
    }
    return tmp;
}

触发它的玩家功能:

void Action1()
{
    NPC go = null;

    switch (facingDirection) {
        case Direction.Up: if (!game.isThereAnythingThere(UpRectangle), out go) ;
            break;
        case Direction.Down: if (!game.isThereAnythingThere(DownRectangle), out go) ;
            break;
        case Direction.Left: if (!game.isThereAnythingThere(LeftRectangle), out go) ;
            break;
        case Direction.Right: if (!game.isThereAnythingThere(RightRectangle), out go) ;
            break;
        } //Now go equals the object in the direction where facing, if theres no object, is null

        if (go != null)
            game.textBox.AddText(go.GetDialogue());
    }
}

PS:gol是我游戏中所有GameObject的列表; GameObjectPlayerNPC都继承自的类。

1 个答案:

答案 0 :(得分:2)

您的问题是,您正在浏览可能包含非NPC内容的列表,并告诉foreach尝试将所有内容投射到NPC。< / p>

最简单的解决方法是使用Linq OfType<T>按类型过滤列表:

foreach (NPC npc in gol.OfType<NPC>())