为什么.NET不向异常消息添加参数值,例如在int.Parse中

时间:2018-02-27 11:07:41

标签: c# .net exception

在.NET方法中经常抛出一般的错误,例如

int.Parse("test")

使用此消息抛出异常:

  

输入字符串的格式不正确。

现在它可以为很多人省下很多麻烦,如果它只是有参数值来帮助调试更容易:

  

输入字符串" test"格式不正确。

这似乎是一件很自然而又容易的事情,但是.NET并没有在许多地方做到这一点,例如解析。这样做是否有任何原因或概念上的问题,或者它只是一个缺失的功能"?

1 个答案:

答案 0 :(得分:3)

我怀疑其原因主要是出于安全原因。在返回的消息中显示/呈现要解析的文本的一些问题是(但不限于)

  • 要解析的文本可能很长。从内存使用和显示角度来看,这将是一个问题,更不用说开发人员记录异常消息的习惯(并非不合理)。
  • 文本可能包含混乱格式的字符(例如,制表符,LF,CR等)
  • 文字可能包含敏感数据。在这一点上,大多数开发人员(至少在开始时)通常默认情况下在异常级别记录或显示错误消息是没有价值的。 包括这里的文字意味着没有意外的数据泄漏来抓住粗心的人。
  • 可以想象(尽管不太可能)可以找到漏洞利用文本,因为格式错误的文本可能会产生令人讨厌的意外副作用。

此外,正在解析的值由调用者提供,这使他们可以选择是否最好记录内容 - 它不是int.Parse()的位置来返回异常消息中的值

总而言之,在没有最初提供的价值的情况下显示简明信息是MS部分明智的决定,可以使我们远离自己并遵循安全最佳实践。