可空枚举类型的奇怪行为
-
21-08-2019 - |
题
我使用的Global.asax在经由Application_EndRequest事件的每个请求的结束执行日志记录。然而,我看到存储在HTTPContext.Current.Items集合中的某些值的一些奇怪的行为。
下面是一个可为空的Enum调试输出。你可以看到,有一个价值,但解决的HasValue为假?!
{System.Nullable(Of AreaNameEnum)}
HasValue: False
hasValue: False
Value: {System.InvalidOperationException}
value: ADMIN {0}
我猜测它是在请求生命周期来不及访问HTTPContext.Current - 但它似乎有时工作,有时没有。任何人都可以摆脱任何更多的光线上到底是怎么回事呢?
由于
解决方案
可为空值是包含布尔hasValue的和T值,其中T是一个值类型的结构。在这种情况下枚举。枚举必须具有在这种情况下,默认为0,然而,公共值抛出异常,因为,hasValue值为假某个值。
你们看到的是可为空的怎么样呢它的内部。你可以不读什么成具有任何价值时hasValue的是假的内在价值领域。毕竟,如果值可以包含空就不会有在这里使用可空的任何一点。
不隶属于 StackOverflow