Aus*_*nen 20
我使用的异常记录器已被调整以写出数据集合中的所有项目.然后,对于我们遇到的每个异常,我们无法从异常堆栈中进行诊断,我们添加该函数范围内的所有数据,发出新的构建,并等待它重新发生.
我想我们是乐观主义者,因为我们没有把它放在每个功能中,但我们是悲观主义者,因为我们一旦解决问题就不会把它拿出来.
Pet*_*yer 16
当我知道我正在创建的异常需要序列化时,我已经使用过它了.有一天使用Reflector,我发现Excepion.Data卡在序列化流中并从中拉出.
因此,基本上,如果我在自定义异常类上具有可序列化类型的属性,我在派生类上实现它们并使用底层数据对象作为它们的存储机制,而不是创建私有字段来保存数据.如果我的自定义异常对象的属性需要更高级的序列化,我通常使用支持私有字段来实现它们,并在派生类中处理它们的序列化.
最重要的是,Exception.Data只是通过将属性粘贴到其中来免费为您提供序列化 - 但请记住这些项目需要可序列化!
Chr*_*sic 11
由于没有答案包含任何代码.作为这个问题的补充可能有用的东西是如何实际查看.Data字典.因为它不是通用字典而只返回IDictionary
foreach(var kvp in exception.Data)kvp的类型实际上是object无益的.但是从MSDN中可以轻松地迭代这个字典:
foreach (DictionaryEntry de in e.Data)
Console.WriteLine(" Key: {0,-20} Value: {1}",
"'" + de.Key.ToString() + "'", de.Value);
Run Code Online (Sandbox Code Playgroud)
我真的不知道格式参数, -20意味着什么,也许Take(20)?Digressing ...这段代码在常见的错误记录器中非常有用,可以解开这些数据.更完整的用法类似于:
var messageBuilder = new StringBuilder();
do
{
foreach (DictionaryEntry kvp in exception.Data)
messageBuilder.AppendFormat("{0} : {1}\n", kvp.Key, kvp.Value);
messageBuilder.AppendLine(exception.Message);
} while ((exception = exception.InnerException) != null);
return messageBuilder.ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14605 次 |
| 最近记录: |