根据MSDN,Environment.StackTrace
可以抛出ArgumentOutOfRangeException
,但我不明白这是怎么回事。
Environment.cs StackTrace
(source)
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)
(source)(删除了评论,它们无关紧要)
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)
。
但是StackTrace(bool)
根据MSDN不会抛出任何例外。另一个可能的构造函数调用StackTrace(Exception, bool)
(MSDN)会抛出异常,但它是ArgumentNullException
而不是ArgumentOutOfRangeException
。我没有在代码中看到任何其他方法调用会抛出ArgumentOutOfRangeException
。
那我错过了什么? Environment.StackTrace
实际上是否可以抛出异常,如果是这样的话?
答案 0 :(得分:3)
实际上检索属性值不应该抛出异常。我们已从Environment.StackTrace property的文档中删除了异常信息。
答案 1 :(得分:2)
阅读源代码我同意不应该在Environment.StackTrace的代码路径上抛出ArgumentOutOfRangeException。
这不是MSDN第一次需要更正。你应该点击“任何建议?”链接在右上角。在回答“页面是否有用?是/否”后,他们会提示您提供任何其他反馈。