gpt4 book ai didi

c# - 为什么 '{' 在静态方法中抛出 NullReferenceException?

转载 作者:太空狗 更新时间:2023-10-29 21:07:06 27 4
gpt4 key购买 nike

这个有点深奥。我在 visual studio 2008 的 winforms 项目中尝试打开一个表单(在 winforms 设计器中)时遇到了 NullReferenceException。堆栈跟踪指向以下代码的第四行:

public static class Logger
{
public static void LogMethodEnter()
{
var frame = new StackFrame(1);
var method = frame.GetMethod();
Trace.TraceInformation("{0}.{1}.{2}()", method.DeclaringType.Namespace, method.DeclaringType.Name, method.Name);
Trace.Indent();
}

public static void LogMethodExit()
{
Trace.Unindent();
}
}

...表示带有左大括号的行。我在其他项目中遇到了同样的问题(但不涉及 winforms 设计器),我认为这是一个与线程相关的问题,但我没有复制它的代码。

为什么会发生这种情况,为什么异常堆栈跟踪指向带有花括号的行?

说明:空引用异常只发生在 winforms 设计器中。当应用程序运行时,它不会抛出该错误。

最佳答案

我猜行号是关闭的(实际原因并不那么重要)并且这个表达式实际上抛出了异常:

method.DeclaringType.Namespace

您可能会看到 NullReference 异常的原因是因为前几行的 new StackFrame(1) 表达式有时会返回空帧。空框架意味着对 .GetMethod() 的调用将返回 null,就这样。

您有时会得到一个空帧的原因是即时编译器可以选择内联简短的、重复调用的方法,就像您的代码中的方法一样。这将抛出您的调用堆栈,因此最好的情况是您获得比预期更高级别的方法,或者最坏的情况是(在您的 Main 方法中)没有更高级别的方法并且您得到 null。

关于c# - 为什么 '{' 在静态方法中抛出 NullReferenceException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com