2010-05-21 6 views
0

ci-dessous le code ne peut pas attraper l'exception.dans C# try -catch, ne peut pas attraper l'exception

catch ne peut pas attraper l'exception qui s'est produite dans la fonction?

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."); 
    } 
} 
+3

Est-il possible que le exeception jeté isnt, la cause de la condition est fausse? – Jehof

+1

cela devrait fonctionner ... peut-être que le "RegisterAlertScript" soulève une autre axception? – Jack

+0

il y a cette chose brillante appelée le débogueur ... – fearofawhackplanet

Répondre

5

Oui il va attraper l'exception savent même il est jeté à l'intérieur une autre fonction que vous appelez.

Soit l'exception n'est pas levée, soit vous ne détectez pas correctement que l'exception est interceptée, peut-être mettez un point d'arrêt aux deux emplacements.

2

Si la fonction ExistFreeSubscription provoque un débordement de pile, elle ne sera pas interceptée.

De plus, il est possible que la fonction lance un objet exception qui n'hérite pas de System.Exception (cela est possible dans d'autres langues, ce n'est pas compatible CLS). catch (Exception ex) n'attraperont pas de telles exceptions (un bloc catch { } peut intercepter des objets d'exception même s'ils ne sont pas hérités de System.Exception).

0

Cela devrait fonctionner, je regarderais de plus près à votre méthode .ExistFreeSubscription(), pour voir pourquoi il ne retourne pas vrai.

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

Si bizNTx.ExistFreeSubscription retours false, alors il semble que votre exception ne sera pas jeté