我正在使用Global.asax通过Application_EndRequest事件在每个请求的末尾执行日志记录。但是,我看到HTTPContext.Current.Items集合中存储的某些值有些奇怪的行为。

以下是可为空的Enum的调试输出。您可以看到有一个值,但是HasValue解析为False ?!

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

我猜测访问HTTPContext.Current在请求生命周期中为时已晚-但它有时可能起作用,有时却不起作用。任何人都可以进一步了解正在发生的事情吗?

谢谢

最佳答案

Nullable是包含 bool 值hasValue和T值(其中T是值类型)的结构。在这种情况下,枚举。在这种情况下,枚举必须具有一些值,默认值为0,但是public值会抛出异常,因为hasValue为false。

您所看到的是Nullable如何执行操作的内部原理。当hasValue为false时,您无法将任何东西读取到内部值字段中。毕竟,如果value可以包含null,则在此处使用Nullable毫无意义。

关于.net - 可为空的Enum类型的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/865916/

10-12 12:55