проблема в том, что после генерации исключения NullResException его тут же обрабатвает блок catch. а мне этого не надо. уточнить тип исключения в catch'е возможности нет. решил проблему вот таким образом:
try
{
arParam[0] = new SqlParameter("@CdID", SqlDbType.Int, 4);
arParam[0].Value = cdID;
reader = SqlHelper.ExecuteReader(Util.Config.ConnectionString, CommandType.Text, sqlCmd, arParam);
if(reader.Read())
{
.
.
.
}
else
{
throw new NullResException();
}
}
catch(Exception ex)
{
if(ex is NullResException)
{
throw new NullResException();
}
else
{
throw new DALException(ex);
}
}
но почему-то мне кажется, что есть более элегантное решение. может кто-нибудь знает альтернативу тому, что сделал я? буду очень благодарен
Спасибо большое, первый вариант меня вполне устраивает.
_FR>Или так, если уж совсем "уточнить тип исключения в catch'е возможности нет". Почему это кстати, "нет"?
просто там могут возникать много разнотипных исключений, и уточнять каждый из них очень громоздзко(по моему даже мой вариант лучше). возможность то всегда есть. главное целесообразность.
_FR>ЗЫ. Если для выделения кода использовать тэг [c#], то читать такой код станет интереснее.
Как по мне, то я всегда перекидываю сообщение передав внутреннее
...
catch(Exception e)
{
throw new Exception("my comment",e);
}
...
, а в одном месте программы перехватываю все исключения и там уже смотрю кто оно, и кто послал, и соответсвенно делаю выводы: в лог, тлт сразу на почту, или в баг трекер (еще этот же выбор, в зависимости от типа исключения, можно предоставить пользователю, так как это сделано в винде).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
-----------------------------------------
тут может быть ваша реклама
try
{
//код
}
catch(NullReferenceException ex)
{
throw;//нельзя писать throw ex, так как иначе исключение будет иметь другой StackTrace
}
catch(Exception ex)
{
throw new DALException(ex);
}