Extraño comportamiento de tipos Enum anulables
-
21-08-2019 - |
Pregunta
Estoy utilizando Global.asax para realizar el registro al final de cada solicitud a través del evento Application_EndRequest. Sin embargo, estoy viendo algún comportamiento extraño de ciertos valores almacenados en la colección HTTPContext.Current.Items.
A continuación se muestra el resultado de la depuración para una enumeración anulable. Se puede ver que hay un valor, pero HasValue resuelto en Falso?!
{System.Nullable(Of AreaNameEnum)}
HasValue: False
hasValue: False
Value: {System.InvalidOperationException}
value: ADMIN {0}
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
Solución
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 por defecto 0, sin embargo el valor público lanza una excepción porque HasValue es falso.
Lo que está viendo es la parte interna de la forma anulable hace lo que hace. No se puede leer nada en el campo valor interno tener ningún valor cuando HasValue es falsa. Después de todo, si el valor podría contener nulos no habría ningún punto en el uso anulable aquí.