2009-05-14 12 views
5

Estoy usando Global.asax para realizar el registro al final de cada solicitud a través del evento Application_EndRequest. Sin embargo, estoy viendo un comportamiento extraño de ciertos valores almacenados en la colección HTTPContext.Current.Items.Comportamiento extraño de los tipos Enum nulables

A continuación se muestra la salida de depuración para un Enum nulo. Puedes ver que hay un valor, pero HasValue se resolvió en False?

{System.Nullable(Of AreaNameEnum)} 
    HasValue: False 
    hasValue: False 
    Value: {System.InvalidOperationException} 
    value: ADMIN {0} 

que supongo que es demasiado tarde en el ciclo de vida de la solicitud para acceder a la HttpContext.Current - pero parece que funciona a veces y otras no. ¿Alguien puede arrojar más luz sobre exactamente lo que está pasando?

Gracias

Respuesta

4

Anulable es una estructura que contiene un HasValue boolean y un valor T donde T es un tipo de valor. En este caso, una enumeración. La enumeración tiene que tener algún valor en este caso el valor predeterminado 0, sin embargo, el valor público arroja una excepción porque hasValue es falso.

Lo que está viendo es la parte interna de cómo Nullable hace lo que hace. No puede leer nada en el campo de valor interno que tenga ningún valor cuando hasValue es falso. Después de todo, si el valor podría contener nulo, no tendría sentido usar Nullable aquí.

+0

Sí, eso tiene sentido ahora que lo pienso. Supongo que el material de HTTPContext fue una pista falsa. Gracias. – James