2009-09-10 3 views
2

Я пытаюсь добавить пару ключей значение и возникают проблемы при добавлении ключа к Exception.Data:Проблема добавления в Exception.Data словарь

Перечисление имеет тип Int (по умолчанию)

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

note: когда я добавляю часы для Enums.ExceptionData.SomeName, я получаю SomeName, имя переименования обратно. для строки выше при попытке добавить это как ключ к словарю.

Когда я пытаюсь проверить ex.Data далее по стеку, он возвращает null. Вот как я пытаюсь проверить это:

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

Так вот как это все идет вниз. Во-первых, в моем Request.cs Абстрактный класс, этот код в конечном итоге работает (да, _someText имеет действительную строку):

 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; 
     } 

В моем коде фоновым я называю этот метод:

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

и вот как выглядит radio.UpdateFrequency:

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

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

     .... 
    } 

так, если это не удается, (в не менее верит) ошибка запроса пузыри до моей Try/улова в моем коде-за:

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

терпит неудачу, теперь захватить эти данные в моих примерках улова в моем коде-позади.

ответ

3

Вы добавляете материал в словарь, используя значение enum как ключ и запрашивая его с помощью строкового ключа (а не перечисления). Измените вышеуказанный код запроса следующим образом, и он должен работать нормально.

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

Этот пример кода пишет hello world в консоли. Есть _someText в вашем примере пустая строка?

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

Но что, если я ловлю его (но не бросать) где-то между, где я добавляю эти данные и пытаясь поймать его снова, будет, что данные будут удалены из стека по какой-то причине, если вы ловите его один раз уже и что-то делать? – PositiveGuy

+0

странно, по какой-то причине я сделал точно так же, как и у вас, и я все еще получаю null, когда он пытается найти этот ключ – PositiveGuy

+0

Я даже пытался жестко кодировать строку значений – PositiveGuy

Смежные вопросы