2009-09-10 3 views
2

Je suis en train d'ajouter une paire de valeurs clés et ayant des difficultés à ajouter la clé Exception.Data:problème en ajoutant à Exception.Data Dictionnaire

Le ENUM est de type int (par défaut)

 catch (Exception ex) 
     { 
      ex.Data.Add(Enums.ExceptionData.SomeName, _someText); 
     } 

note: quand j'ajoute une montre pour Enums.ExceptionData.SomeName, j'obtiens SomeName, le nom de l'enum back. pour la ligne ci-dessus en essayant d'ajouter cela comme une clé pour le dictionnaire.

Lorsque j'essaie de vérifier l'ex.Data plus loin dans la pile, il retourne null. Voici comment je tente de le vérifier:

ex.Data[Enums.ExceptionData.SomeName].ToString() 

Alors, voici comment tout cela va vers le bas. Tout d'abord, dans mon Request.cs classe abstraite, ce code court terme (oui, _someText a une chaîne valide):

 try 
     { 
      // Send the Request 
      requestStream = request.GetRequestStream(); 
      requestStream.Write(data, 0, data.Length); 
      requestStream.Close(); 

      // get response 
      response = (HttpWebResponse)request.GetResponse(); 
     } 
     catch (Exception ex) 
     { 
      // include SOAP string that was sent 
      ex.Data.Add(Enums.ExceptionDataRequest.SomeName, _someText); 
      string test; 
     } 

Dans mon code-behind j'appelle cette méthode:

 try 
     { 
      radio.UpdateFrequency(...); 
      LogFrequency(); 
     } 
     catch (Exception ex) 
     { 
      radio.LogFailure(..., ex.Data[Enums.ExceptionDataRequest.SomeName].ToString()); 
     } 

et voici comment radio.UpdateFrequency ressemble:

public void UpdateFrequency(...) 
    { 
     .... 

     // update frequency (which also performs opt-in) 
     FrequencyRequest request = new FrequencyRequest(actionID, email, listID); 
     FrequencyResponse response = (FrequencyResponse)request.SendRequest(); 

     .... 
    } 

donc si cela ne fonctionne pas, (à moins croire) l'erreur de demande des bulles jusqu'à mon try/catch dans mon code-behind:

FrequencyRequest request = new FrequencyRequest(actionID, email, listID); 

échoue, prenez maintenant que les données dans mon try-catch dans mon code-behind.

Répondre

3

Vous ajoutez des éléments au dictionnaire en utilisant la valeur enum comme clé et en l'interrogeant avec une clé de chaîne (pas enum). Modifiez le code de requête ci-dessus comme suit et cela devrait fonctionner correctement.

ex.Data[Enums.ExceptionData.SomeName].ToString() 

Ce code exemple écrit hello world dans la console. Dans votre exemple, _someText est-il une chaîne vide?

namespace ConsoleApplication1 
{ 
    using System; 

    enum Values 
    { 
     Value1 
    } 

    class Program 
    { 
     static void Test() 
     { 
      try 
      { 
       int a = 0; 
       int c = 12/a; 
      } 
      catch (Exception ex) 
      { 
       ex.Data.Add(Values.Value1, "hello world"); 
       throw ex; 
      } 
     } 

     static void Main(string[] args) 
     { 
      try 
      { 
       Test(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Data[Values.Value1].ToString()); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
+0

Mais si je l'attrape (mais pas jeter) quelque part entre où j'ajoute ces données et d'essayer de l'attraper à nouveau, serait que les données enlever la pile pour une raison quelconque, si vous attrapez une fois déjà et faire quelque chose? – PositiveGuy

+0

bizarre, pour une raison quelconque, j'ai fait exactement la même chose que vous avez et je reçois encore zéro quand il essaie de trouver cette clé – PositiveGuy

+0

J'ai même essayé de coder en dur dans la chaîne de valeur de clé – PositiveGuy

Questions connexes