【问题标题】:What is the meaning of NullReferenceException [duplicate]NullReferenceException是什么意思[重复]
【发布时间】:2010-11-05 02:30:21
【问题描述】:

可能重复:
What is a NullReferenceException in .NET?

例如,“System.NullReferenceException 未处理”,消息“对象引用未设置为对象的实例。”

这个异常是什么意思,如何解决?

【问题讨论】:

    标签: c#


    【解决方案1】:

    这是 .NET 中最常见的异常......它只是意味着您尝试调用未初始化的变量的成员(null)。你需要先初始化这个变量,然后才能调用它的成员

    【讨论】:

    • 请注意,此建议适用于“字段”(实例/静态变量),但不适用于局部变量(明确赋值应用于局部变量;您甚至不能尝试 使用未初始化的局部变量)。
    【解决方案2】:

    这意味着你试图访问不存在的东西的成员:

    string s = null;
    int i = s.Length; // boom
    

    只需修复为空的东西。要么使其非空,要么先执行空测试。

    这里还有一个corner-caseNullable<T>、泛型和new 泛型约束相关——虽然有点不太可能(但见鬼,我遇到了这个问题!)。

    【讨论】:

      【解决方案3】:

      这意味着当变量尚未初始化时,您已尝试使用对象的方法或属性:

      string temp;
      int len = temp.Length; // throws NullReferenceException; temp is null
      
      string temp2 = "some string";
      int len2 = temp2.Length; // this works well; temp is a string
      

      【讨论】:

      • 对于局部变量(如示例所示),它初始化(否则它不会编译)。很简单:它被初始化为null。
      • 如果 'temp' 是一个局部变量,它将编译。如果它是一个字段,它将为空。
      【解决方案4】:

      下面的代码将向您展示异常和线索。

      string s = null;
      s = s.ToUpper();
      

      【讨论】:

        【解决方案5】:

        在您的代码中的某处,您有一个对象引用,但它没有设置为对象的实例 :)

        你在某个地方使用了一个对象,但没有调用它的构造函数。

        你应该做什么:

        MyClass c = new MyClass();
        

        你做了什么:

        MyClass c;
        c.Blah();
        

        【讨论】:

        • 哪个不会编译...(明确赋值)
        • 你是对的,他们也不会有我的 MyClass 实现。让我们随机 r = null; r.Next();
        【解决方案6】:

        这意味着您正在引用 null 的内容,例如:

        class Test
        {
        
           public object SomeProp
           {
              get;
              set;
           }
        
        }
        
        new Test().SomeProp.ToString()
        

        SomeProp 将为 null,应该抛出一个 NullReferenceException。这通常是由于您调用的代码期望有一些不存在的东西。

        【讨论】:

        • 如果o 是一个局部变量,这不会编译。未赋值的局部变量不是null
        • 你是对的。改变了例子。
        猜你喜欢
        • 2023-04-10
        • 2020-04-22
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        • 2015-02-20
        相关资源
        最近更新 更多