Kio*_*iki 15 .net c# exception
我确信我已经在框架中的各种异常消息中看到了这一点.我检查了MSDN库中的以下页面,但找不到有关消息内容的更多指导:
异常抛出
错误消息设计
Exception.Message属性
第一页中可以解释它的唯一部分是这个文本:
在不要求适当权限的情况下,不要在异常消息中公开安全敏感信息.
这是由Dictionary <TKey,TValue> .Add方法抛出的ArgumentException ,它让我想起了这个问题.它看起来像这样:
System.ArgumentException : An item with the same key has already been added.
Run Code Online (Sandbox Code Playgroud)
为什么看起来不像这样?
System.ArgumentException : An item with the same key(123) has already been added.
Run Code Online (Sandbox Code Playgroud)
假设123是TKey值,基本上任何具有TKey值的格式都是我在调试时追踪错误的有用之处.
是否有一个已知的原因,为什么不包括这个?
用消息中的密钥重新抛出参数异常会被认为是不好的做法吗?我曾考虑过创建自己的异常子类,但我认为这是一个使用内置异常类似乎更好的选择的情况.
Nie*_*jes 26
根据经验,框架中的特殊情况希望避免创建新的异常情况.要格式化这样的消息:
System.ArgumentException : An item with the same key(123) has already been added.
Run Code Online (Sandbox Code Playgroud)
人们不得不假设toString关键参数有一个有效的实现.但如果是这样null呢?或者,如果它是一个自定义键,它会抛出一个新的异常toString?或者甚至一些白痴实施了一种toString方法,在10次中抛出一次随机异常?如果内部异常是由内存不足导致的,并且转换会再次触发它会怎么样?它会给不仅仅是报告它是什么,更不可预测的结果肯定是能够报告.
它看起来像一个安全预防措施.该程序可能正在处理安全敏感数据,它注意不要写入日志消息或通过UI显示.但是,oops,存在一个问题并且未处理的异常消失,其中一些默认处理程序显示或记录该敏感信息的片段,因为它包含在异常文本中.