我正在尝试添加键值对,并且无法将键添加到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中获取数据。
答案 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();
}
}
}