2010-04-21 14 views
6

que tienen código como este:C# - nulo vs "No se pudo evaluar la expresión"

private Box mCurBox; 

    public Box CurBox 
    { 
     get { return mCurBox; } 
     set 
     { 
      if (mCurBox != value) 
      { 
       mCurBox = value; 
      } 
     } 
    } 

Cuando mCurBox es nulo, CurBox el depurador dice "no se pudo evaluar". Si sabe que el valor debajo es nulo, ¿cómo es que no puede resolverlo?

Respuesta

7

Esto se debe a que no ha definido mCurBox como algo por defecto, por lo que el compilador señala esto como un comportamiento indefinido.
Debe inicializar mCurBox como nulo, ya sea en la misma línea que lo define o en un constructor.
En general, es una buena práctica inicializar los tipos de referencia a nulos si no les asigna algo al definirlos.
Además, dado que solo está asignando y recuperando, puede usar fácilmente propiedades automáticas.

+0

Dudo sobre la afirmación "es una buena práctica inicializar los tipos de referencia a nulos"; El marco se encarga de asignar estos valores a sus valores predeterminados. –

2

El depurador puede ponerse travieso de vez en cuando. Pero el caso esperado de obtener "No se pudo evaluar" es una compilación de versión. Las propiedades simples como esta se optimizan con el compilador JIT. El código de obtención de propiedad ni siquiera estaría presente.

Cuestiones relacionadas