到目前为止,我对此的最佳解释是"魔术"。
public string GetRouteSegmentData(RouteSegment RouteSegment, Exporter.RouteExporter Exporter)
{
try
{
List<RouteProviderSegmentData> List = Provider.GetSegments(RouteSegment);
}
catch (Exception e)
{
// logging and return null
}
}
// -----------------
// In the Provider class (more accurately, a child of a Provider class)
public override List<RouteProviderSegmentData> GetSegments(RouteSegment RouteSegment)
{
// CHECK 1
if (RouteSegment.RouteLineEntity == null) { throw new Exception("LineEntity null for route " + RouteSegment.Code); }
// CHECK 2
if (RouteSegment.RouteLineEntity.ListRouteLineParts == null) { throw new Exception("LineParts null for route " + RouteSegment.Code); }
// ...
}
所以这就是发生的事情:CHECK 1是真的,RouteLineEntity实际上是null,当我调试它很好地进入&#34; throw&#34;部分。但那时......似乎没有任何事情发生。 GetRouteSegmentData()中的捕获并没有捕捉到任何东西,它就像没有抛出任何东西一样。 GetSegments()只是继续执行CHECK 2,并且由于RouteLineEntity仍然为null,因此抛出异常(因为我试图访问对象的ListRouteLineParts属性为null),这次是异常会陷入GetRouteSegmentData()。
因此,出于某种原因,我的手动抛出异常被公然忽略。 我试图把一些代码放在最先抛出的代码后面,但是这个代码永远不会被执行(正如你所期望的那样,我猜)。
这里发生了什么?