2009-05-14 9 views
5

Tôi đang sử dụng Global.asax để thực hiện ghi nhật ký ở cuối mỗi yêu cầu thông qua sự kiện Application_EndRequest. Tuy nhiên, tôi thấy một số hành vi kỳ lạ của một số giá trị được lưu trữ trong bộ sưu tập HTTPContext.Current.Items.Hành vi lạ của null Loại Enum

Dưới đây là đầu ra gỡ lỗi cho Enum rỗng. Bạn có thể thấy rằng có một giá trị, nhưng HasValue đã giải quyết thành Sai?

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

Tôi đoán rằng đã quá muộn trong vòng đời yêu cầu để truy cập HTTPContext.Current - nhưng đôi khi có vẻ như hoạt động và đôi khi không. Có ai có thể làm sáng tỏ chính xác những gì đang diễn ra không?

Cảm ơn

Trả lời

4

Nullable là một cấu trúc có chứa một hasValue boolean và một giá trị T trong đó T là một loại giá trị. Trong trường hợp này là một enum. Enum phải có một số giá trị trong trường hợp này là mặc định 0, tuy nhiên giá trị công cộng ném một ngoại lệ vì hasValue là false.

Những gì bạn thấy là nội bộ của cách Nullable thực hiện những gì nó làm. Bạn không thể đọc bất cứ điều gì vào trường giá trị nội bộ có bất kỳ giá trị nào khi hasValue là false. Sau khi tất cả nếu giá trị có thể chứa null sẽ không có bất kỳ điểm nào trong việc sử dụng Nullable tại đây.

+0

Vâng, điều đó có ý nghĩa bây giờ tôi nghĩ về nó. Tôi đoán công cụ HTTPContext là một cá trích đỏ. Cảm ơn. – James