C#无效强制转换异常(我不知道错误在哪里)

C#无效强制转换异常(我不知道错误在哪里),c#,out,C#,Out,所以,我用这个方法来检测当按下按钮时播放器前面是否有任何东西,问题是,即使没有out参数(它返回播放器前面的任何人)的相同方法似乎也能工作,这个方法抛出一个无效的强制转换异常,尽管我做了调查,我还是不知道这里有什么问题 有问题的函数代码: public bool isThereAnythingThere(Rectangle rec, out NPC other) { bool tmp = false; other = null; foreach (NPC npc in

所以,我用这个方法来检测当按下按钮时播放器前面是否有任何东西,问题是,即使没有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());
    }
}
注:
gol
是我游戏中所有
GameObject
s的列表;
GameObject
是一个
Player
NPC
都继承自的类。

您的问题是,您正在迭代一个列表,其中可能包含非
NPC
的内容,并告诉
foreach
尝试将所有内容转换为
NPC

最简单的修复方法是使用Linq
of type
按类型筛选列表:

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

您的问题是,您正在遍历可能包含非
NPC
的内容的列表,并告诉
foreach
尝试将所有内容转换为
NPC

最简单的修复方法是使用Linq
of type
按类型筛选列表:

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

gol是什么类型的?如果它不是
NPC
的可枚举项,则
foreach
将导致该类型的异常。当您逐行调试和推进时,哪一行抛出错误?异常的堆栈跟踪应提供您所需的信息。如果没有,请将您的代码更新为再现问题所需的完整最小程序。如果没有stacktrace,您不能向我们提供异常,如果没有整个类声明结构(类完整定义),您也不能向我们提供CastException。
gol
的确切类型是什么?我怀疑它是一个非泛型列表(例如ArrayList),因此它可能包含一些非
NPC
什么类型是
gol
?如果它不是
NPC
的可枚举项,则
foreach
将导致该类型的异常。当您逐行调试和推进时,哪一行抛出错误?异常的堆栈跟踪应提供您所需的信息。如果没有,请将您的代码更新为再现问题所需的完整最小程序。如果没有stacktrace,您不能向我们提供异常,如果没有整个类声明结构(类完整定义),您也不能向我们提供CastException。
gol
的确切类型是什么?我怀疑它是一个非泛型列表(例如ArrayList),因此它可能包含的内容不是
NPC