2009-04-22 21 views
118

Estoy recibiendo este error y no estoy seguro de lo que significa?¿Qué significa "Referencia de objeto no establecida en una instancia de un objeto"?

Referencia de objeto no establecida en una instancia de un objeto.

+2

Más información favor. – johnny

+9

Esta es la "luz del motor de comprobación" de los errores de .NET. Realmente necesita ser más detallado cuando trate de pedir ayuda sobre SO. –

+1

Casi todos los casos de 'NullReferenceException' son iguales. Consulte "[¿Qué es una NullReferenceException en .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)" para obtener algunas sugerencias. –

Respuesta

12

No es franco, pero significa exactamente lo que dice. Una de sus referencias de objeto es NULL. Verá esto cuando intente acceder a la propiedad o al método de un objeto NULL.

+2

Puede estar haciendo throw new NullReferenceException(); lol ... –

+8

Significa exactamente lo que dice SI sabe qué es un objeto, una referencia y una instancia ... todas palabras muy cargadas a la hora de programar. –

+0

Jhonny - jajaja, supongo que tienes razón – dkpatt

4

Significa que hiciste algo como esto.

Class myObject = GetObjectFromFunction(); 

Y sin haciendo

if(myObject!=null), adelante qué myObject.Method();

1

¿qué significa este error? Referencia a objeto no establecida como instancia de un objeto.

exactamente lo que dice, que están tratando de utilizar un objeto nulo como si fuera un objeto adecuadamente referencia.

1

La mayoría de las veces, cuando intenta asignar valor al objeto, y si el valor es nulo, se produce este tipo de excepción. Por favor, marque this link.

por el bien del autoaprendizaje, puede poner algunas condiciones de verificación. como

if (myObj== null) 
Console.Write("myObj is NULL"); 
114

Las variables en .NET son tipos de referencia o tipos de valores. Los tipos de valores son primitivos como integers y booleans o estructuras (y se pueden identificar porque heredan de System.ValueType). Las variables booleanas, cuando declaró, tienen un valor por defecto:

bool mybool; 
//mybool == false 

Tipos de referencia, cuando se declaró, no tienen un valor por defecto:

class ExampleClass 
{ 
} 

ExampleClass exampleClass; //== null 

Si se intenta acceder a un miembro de una instancia de la clase utilizando una referencia nula, entonces obtienes un System.NullReferenceException. Que es lo mismo que Referencia de objeto no establecida en una instancia de un objeto.

El código siguiente es una forma sencilla de reproducir esto:

static void Main(string[] args) 
{ 
    var exampleClass = new ExampleClass(); 
    var returnedClass = exampleClass.ExampleMethod(); 
    returnedClass.AnotherExampleMethod(); //NullReferenceException here. 
} 

class ExampleClass 
{ 
    public ReturnedClass ExampleMethod() 
    { 
     return null; 
    } 
} 

class ReturnedClass 
{ 
    public void AnotherExampleMethod() 
    { 
    } 
} 

Este es un error muy común y puede ocurrir debido a muchas razones. La causa raíz realmente depende del escenario específico que haya encontrado.

Si está utilizando una API o invocando métodos que pueden devolver nulo, entonces es importante manejar este con gracia.El principal método anterior se puede modificar de tal manera que el NullReferenceException nunca debe ser visto por un usuario:

static void Main(string[] args) 
{ 
    var exampleClass = new ExampleClass(); 
    var returnedClass = exampleClass.ExampleMethod(); 

    if (returnedClass == null) 
    { 
     //throw a meaningful exception or give some useful feedback to the user! 
     return; 
    } 

    returnedClass.AnotherExampleMethod(); 
} 

Todo lo anterior realmente sólo toques de .NET Tipo Fundamentos, para más información te recomiendo cualquiera recogiendo CLR via C# o leyendo esto MSDN article por el mismo autor - Jeffrey Richter. También consulte, mucho más complejo, example de cuando puede encontrar una NullReferenceException.

Algunos equipos que usan Resharper utilizan JetBrains attributes para anotar el código y resaltar dónde se esperan (no) los valores nulos.

+1

¿Qué pasa si tengo una lista dentro de otra clase, como esta: https://pastebin.com/aWhfu8UM. Obtengo una excepción '' Run-time exception (line 9): referencia de objeto no establecida en una instancia de un objeto. Error – Si8

+0

Como la etiqueta es .net pero el idioma no está especificado, en VB.Net el error común es simplemente diga 'Dim exampleClass As exampleClass' en lugar de' Dim exampleClass As New exampleClass'. –

16

Otra forma sencilla de conseguir esto:

Person myPet = GetPersonFromDatabase(); 
// check for myPet == null... AND for myPet.PetType == null 
if (myPet.PetType == "cat") <--- fall down go boom! 
+1

La respuesta de Jay demuestra otro ejemplo que no está cubierto por ninguna de las otras respuestas aquí. – Iain

0

Si tengo la clase:

public class MyClass 
{ 
    public void MyMethod() 
    { 

    } 
} 

y luego hago:

MyClass myClass = null; 
myClass.MyMethod(); 

La segunda línea lanza esta excepción becuase Estoy llamando a un método en un objeto reference type que es null (es decir, no ha sido instantiated llamando myClass = new MyClass())

+0

¿Qué pasa si tengo una lista dentro de otra clase, como esta: https://pastebin.com/aWhfu8UM. Obtengo una excepción 'Run-time exception (line 9): Object reference not set to event of object'. Error – Si8

9

En pocas palabras esto significa .. Usted está intentando acceder a un objeto sin crear instancias de ella .. Es posible que tenga que utilizar la "nueva" palabra clave para crear una instancia que primero es decir crear una instancia del mismo.

Por ejemplo:

public class MyClass 
{ 
    public int Id {get; set;} 
} 

MyClass myClass; 

myClass.Id = 0; <----------- An error will be thrown here.. because myClass is null here... 

Usted tendrá que utilizar:

myClass = new MyClass(); 
myClass.Id = 0; 

esperanza I dejó claro ..

+0

Creo que esta respuesta es la mejor respuesta para NullException. Salvó uno de mis proyectos. –

Cuestiones relacionadas