в C# try -catch, не може да улови изключението

кодът по-долу не може да улови изключението.

catch не може ли да улови изключението, възникнало във функцията?

 try
 {
   Arche.Members.Feedback.FeedbackBiz_Tx a = 
     new Arche.Members.Feedback.FeedbackBiz_Tx();

   a.AddFreeSubscriptionMember(
     itemNo, buyerID, itemName, 
     DateTime.Today,DateTime.Today);
 }
 catch(Exception ex)
 {
   RegisterAlertScript(ex.Message);
 }

...

public void AddFreeSubscriptionMember(
  string itemNo, string buyerID, string itemName,
  DateTime fsStartDate, DateTime fsEndDate)
{
  FeedbackBiz_NTx bizNTx = new FeedbackBiz_NTx();

  if (bizNTx.ExistFreeSubscription(buyerID, itemNo))
  {
    throw new Exception("Exception.");
  }
}

person Sungguk Lim    schedule 21.05.2010    source източник
comment
Възможно ли е изключението да не е хвърлено, тъй като условието се оценява като false?   -  person Jehof    schedule 21.05.2010
comment
това трябва да работи... може би RegisterAlertScript повдига друго изключение?   -  person Jack    schedule 21.05.2010
comment
има едно брилянтно нещо, наречено дебъгер...   -  person fearofawhackplanet    schedule 21.05.2010


Отговори (4)


Да, ще улови изключението дори да знае, че е хвърлено от друга функция, която извиквате.

Или изключението не се хвърля, или не откривате правилно, че изключението е уловено, може би поставете точка на прекъсване и на двете места.

person Brian R. Bondy    schedule 21.05.2010

Ако функцията ExistFreeSubscription причини препълване на стека, тя няма да бъде уловена.

Освен това е възможно функцията да хвърли обект на изключение, който не наследява от System.Exception (това е възможно на други езици, не е съвместимо с CLS). catch (Exception ex) няма да хване такъв вид изключения (блок catch { } може да хване обекти на изключение, дори ако не са наследени от System.Exception).

person mmx    schedule 21.05.2010

Това трябва да работи, бих погледнал по-отблизо вашия метод .ExistFreeSubscription(), за да видя защо не връща true.

person JohnForDummies    schedule 21.05.2010

if (bizNTx.ExistFreeSubscription(buyerID, itemNo))
{
    throw new Exception("Exception.");
}

Ако bizNTx.ExistFreeSubscription върне false, тогава изглежда, че вашето изключение няма да бъде хвърлено

person Ian Oxley    schedule 21.05.2010