添加到Exception.Data Dictionary的问题

时间:2009-09-10 20:06:09

标签: c# exception-handling

我正在尝试添加键值对,并且无法将键添加到Exception.Data:

枚举的类型为int(默认值)

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

注意:当我为Enums.ExceptionData.SomeName添加一个监视时,我得到了SomeName,这是枚举的名称。对于上面的行,当尝试将其添加为字典的键时。

当我尝试在堆栈中进一步检查ex.Data时,它返回null。以下是我尝试检查它的方法:

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

所以这一切都是如此。首先,在我的Request.cs Abstract类中,此代码最终运行(是的,_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 / catch:

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

失败,现在在我的代码隐藏中的try-catch中获取数据。

1 个答案:

答案 0 :(得分:3)

您正在使用枚举值作为键将字符串添加到字典中,并使用字符串键(不是枚举)进行查询。如下更改上面的查询代码,它应该可以正常工作。

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