Bạn đã bao giờ thử sử dụng phương pháp Convert.ChangeType()
để chuyển đổi giá trị thành loại Nullable<T>
? Lúng túng, nó sẽ ném một InvalidCastException
nói rằng "Null đối tượng không thể được chuyển đổi thành một loại giá trị".Tại sao Nullable <T> được coi là một loại giá trị?
Cố gắng chạy này trên cửa sổ trước mắt của bạn: ?System.Convert.ChangeType(null, typeof(int?))
kiểu giá trị Đối với một số lý do mơ hồ, Nullables được xem xét. Ví dụ: typeof(int?).IsValueType
trả về true
.
Đối với tôi, kể từ Nullable<T>
chấp nhận null
, đây là loại lớp, không phải là loại giá trị. Có ai biết tại sao nó sẽ được thực hiện khác nhau?
Hành vi đấm bốc lạ thường mất một thời gian để hiểu - nhưng tôi rất vui vì đó là cách của nó; nếu không nhiều giá trị của 'Nullable' (xuất phát từ tính trong suốt giá trị) sẽ bị mất. –
LBushkin
Trên thực tế, hành vi quyền anh là một thay đổi xảy ra muộn trong chu kỳ phát triển .NET 2.0. Trong bản beta đầu tiên, 'Nullable' là một cấu trúc đơn giản. Trong thực tế khi bạn thực sự sử dụng các kiểu nullable để lưu trữ các giá trị không tồn tại, tôi cũng cảm thấy hành vi này là tự nhiên hơn. –
Thông tin bổ sung tuyệt vời bằng cách này – Nick