抛出异常后,方法莫名其妙地继续

时间:2014-07-18 08:54:47

标签: c# exception-handling try-catch

到目前为止,我对此的最佳解释是"魔术"。

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()。

因此,出于某种原因,我的手动抛出异常被公然忽略。 我试图把一些代码放在最先抛出的代码后面,但是这个代码永远不会被执行(正如你所期望的那样,我猜)。

这里发生了什么?

0 个答案:

没有答案