这感觉像是一个愚蠢的问题,但我有一个控制台应用程序应该抛出和处理自定义异常类型。出于某种原因,它陷入了一般的异常捕获,我不知道为什么。
主程序:
try
{
result = MyService.ExecuteSearch(paramItems);
}
catch (TimeoutException ex)
{
// Catch time out exceptions here
}
catch (SearchAnticipatedException ex)
{
// THIS IS WHERE I WANT TO BE WITH MY CUSTOM EXCEPTION & MESSAGE
}
catch (Exception ex)
{
// THE ORIGINAL EXCEPTION IS BEING CAUGHT HERE
}
我的逻辑的主要内容捕获了一个 EndpointNotFoundException ,我试图而不是抛出那个 - 用更有意义的消息(和其他信息)抛出我的自定义异常。但是,原来的 endpoingnotfoundexception 正在那个 Catch (Exception ex) 块中处理。
try
{
// do some logic
((IClientChannel)proxy).Close();
}
catch (CommunicationObjectFaultedException ex)
{
throw new SearchAnticipatedException(ServiceState.Critical, hostName, ex);
}
catch (EndpointNotFoundException ex)
{
throw new SearchAnticipatedException(ServiceState.Critical, hostName, ex);
}
finally
{
if (((IClientChannel)proxy).State == CommunicationState.Opened)
{
factory.Abort();
((IClientChannel)proxy).Close();
}
}
如果我注释掉主要部分底部的一般异常,那么它会被正确的块捕获 - 我认为它会首先被更具体的异常捕获,如果它与其中任何一个都不匹配,它将落入最后一种一般类型的块。
希望这只是我塞满的小东西:)
我的异常类看起来像:
class SearchAnticipatedException : System.Exception
{
public int ServiceStateCode { get; set; }
public SearchAnticipatedException(MyService.ServiceState serviceState, string message, Exception innerException)
: base(message, innerException)
{
ServiceStateCode = (int)serviceState;
}
public static string FormatExceptionMessage(string message, MyService.ServiceState serviceState)
{
return serviceState.ToString().ToUpper() + SearchResult.CODE_MESSAGE_DELIMITER + message;
}
}