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

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

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

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

那么我错过了什么?Environment.StackTrace真的有可能抛出异常吗?如果有,怎么抛出?

Environment.StackTrace如何引发ArgumentOutOfRangeException

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

阅读源代码后,我同意永远不应在Environment.StackTrace.的代码路径上引发ArgumentOutOfRangeException

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

相关文章:
  • 没有找到相关文章