Environment.StackTrace如何抛出ArgumentOutOfRangeException?

时间:2015-11-13 18:27:28

标签: c# .net

根据MSDNEnvironment.StackTrace可以抛出ArgumentOutOfRangeException,但我不明白这是怎么回事。

Environment.cs StackTracesource

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 );
}

上述方法可能会调用StackTraceStackTrace(bool)StackTrace(Exception, bool)两个构造函数。

我们从第一次调用中知道,如果通过Environment.StackTrace调用达到此方法,则可以保证调用StackTrace(bool)

但是StackTrace(bool)根据MSDN不会抛出任何例外。另一个可能的构造函数调用StackTrace(Exception, bool)MSDN)会抛出异常,但它是ArgumentNullException而不是ArgumentOutOfRangeException。我没有在代码中看到任何其他方法调用会抛出ArgumentOutOfRangeException

那我错过了什么? Environment.StackTrace实际上是否可以抛出异常,如果是这样的话?

2 个答案:

答案 0 :(得分:3)

实际上检索属性值不应该抛出异常。我们已从Environment.StackTrace property的文档中删除了异常信息。

答案 1 :(得分:2)

阅读源代码我同意不应该在Environment.StackTrace的代码路径上抛出ArgumentOutOfRangeException。

这不是MSDN第一次需要更正。你应该点击“任何建议?”链接在右上角。在回答“页面是否有用?是/否”后,他们会提示您提供任何其他反馈。