C#无效强制转换异常(我不知道错误在哪里)
所以,我用这个方法来检测当按下按钮时播放器前面是否有任何东西,问题是,即使没有out参数(它返回播放器前面的任何人)的相同方法似乎也能工作,这个方法抛出一个无效的强制转换异常,尽管我做了调查,我还是不知道这里有什么问题 有问题的函数代码:C#无效强制转换异常(我不知道错误在哪里),c#,out,C#,Out,所以,我用这个方法来检测当按下按钮时播放器前面是否有任何东西,问题是,即使没有out参数(它返回播放器前面的任何人)的相同方法似乎也能工作,这个方法抛出一个无效的强制转换异常,尽管我做了调查,我还是不知道这里有什么问题 有问题的函数代码: public bool isThereAnythingThere(Rectangle rec, out NPC other) { bool tmp = false; other = null; foreach (NPC npc in
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
最简单的修复方法是使用Linqof type
按类型筛选列表:
foreach (NPC npc in gol.OfType<NPC>())
foreach(NPC在gol.OfType()中)
您的问题是,您正在遍历可能包含非NPC
的内容的列表,并告诉foreach
尝试将所有内容转换为NPC
最简单的修复方法是使用Linqof 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