代码之家  ›  专栏  ›  技术社区  ›  Reto Meier

查看哪个对象引用导致NullReferenceException

  •  1
  • Reto Meier  · 技术社区  · 15 年前

    我有一种奇怪的情况,有时,当从VisualStudio运行应用程序的调试构建时,我会在某一行得到一个NullReferenceException。

    VisualStudio将弹出指向该行的异常助手框,但该行上使用的3个对象引用在该点处均不为空。


    电话是:

    myClassInstance.myMethod(myOtherClassInstance.IPAddressInstance.ToString());
    

    我的两个类实例都是非null的,IPAddress实例也是非null的(它具有预期的值)。

    3 回复  |  直到 15 年前
        1
  •  2
  •   xanadont    15 年前

    小心返回空对象的函数。这让我明白了一次,但在调试器中不是很清楚。看看这个:

    public class FooBar
    {
        public int ReturnInt() { return 0; }
    }
    
    public FooBar ReturnNullObject()
    {
        return null;
    }
    
    // Execution code:
    int exceptionalInt = ReturnNullObject().ReturnInt();
    

    编辑:根据您的编辑,确保IPAddressInstance未返回null。

    编辑:您可能希望将单行拆分为几行。这应该会有所帮助。

    var ip = myOtherClassInstance.IPAddressInstance;
    var ipString = ip.ToString();
    myClassInstance.myMethod(ipString);
    
        2
  •  1
  •   Lasse V. Karlsen    15 年前

    如果您正在调用标有 [DebuggerNonUserCode] 属性,则问题可能在框架代码中,而不是在该行。

    在任何情况下,你有一个具体的例子,你可以张贴?

        3
  •  0
  •   bohdan_trotsenko    15 年前

    在该行设置一个断点,直到得到NRE。

    没有魔法,对吧?有些代码试图取消引用 null .

    A.Property.Property2.ToString() ToString() 方法,该方法位于Visual Studio在调试中不输入的程序集中。