Environment.StackTrace如何引发ArgumentOutOfRangeException
本文关键字:ArgumentOutOfRangeException 何引发 StackTrace Environment | 更新日期: 2023-09-27 18:21:54
根据MSDN,Environment.StackTrace
可以抛出ArgumentOutOfRangeException
,但我不明白这怎么可能。
Environment.cs StackTrace
(来源)
public static String StackTrace {
[System.Security.SecuritySafeCritical]
get {
Contract.Ensures(Contract.Result<String>() != null);
new EnvironmentPermission(PermissionState.Unrestricted).Demand();
return GetStackTrace(null, true);
}
}
调用GetStackTrace(Exception, bool)
,其中Exception
为空。
Environment.cs GetStackTrace(Exception, bool)
(来源)(注释已删除,它们无关紧要)
internal static String GetStackTrace(Exception e, bool needFileInfo)
{
StackTrace st;
if (e == null)
st = new StackTrace(needFileInfo);
else
st = new StackTrace(e, needFileInfo);
return st.ToString( System.Diagnostics.StackTrace.TraceFormat.Normal );
}
上述方法有可能调用StackTrace
、StackTrace(bool)
和StackTrace(Exception, bool)
这两个构造函数。
我们从第一次调用中知道,如果通过Environment.StackTrace
调用到达该方法,则保证调用StackTrace(bool)
。
但根据MSDN的说法,StackTrace(bool)
并没有抛出任何异常。另一个可能的构造函数调用StackTrace(Exception, bool)
(MSDN)确实抛出了异常,但它是ArgumentNullException
而不是ArgumentOutOfRangeException
。我在代码中没有看到任何其他会抛出ArgumentOutOfRangeException
的方法调用。
那么我错过了什么?Environment.StackTrace
真的有可能抛出异常吗?如果有,怎么抛出?
检索属性值实际上不应该引发异常。我们已经从Environment.StackTrace属性的文档中删除了异常信息。
阅读源代码后,我同意永远不应在Environment.StackTrace.的代码路径上引发ArgumentOutOfRangeException
这不是MSDN第一次需要更正。你应该点击右上角的"有什么建议吗?"链接。在回答"该页面有用吗?是/否"后,他们将提示提供任何其他反馈。