Định nghĩa của Nullable<T>
là:Tại sao tôi không thể viết Nullable <Nullable <int>>?
[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
Ràng buộc where T : struct
ngụ ý rằng T
chỉ có thể là một loại giá trị. Vì vậy, tôi rất tốt hiểu rằng tôi không thể viết:
Nullable<string> a; //error. makes sense to me
Vì string
là một loại tài liệu tham khảo, không phải là một loại giá trị. Nhưng tôi thực sự không hiểu tại sao tôi không thể viết
Nullable<Nullable<int>> b; //error. but why?
Tại sao không được phép? Sau khi tất cả, Nullable<int>
là một loại giá trị, và do đó, nó có thể được loại đối số để Nullablle<T>
.
Khi tôi biên soạn nó trên ideone, nó mang lại cho lỗi này (ideone):
lỗi CS0453: '? Int' Loại phải là một kiểu giá trị không nullable để sử dụng nó như là kiểu tham số 'T' trong các loại generic hoặc phương pháp 'System.Nullable' Compilation failed: 1 lỗi (s), 0 cảnh báo
Lỗi nào? – asawyer
Xin lỗi, câu trả lời của tôi là sai. Câu lệnh 'new Nullable(); 'biên dịch (dẫn đến' int? 'Với giá trị null), mặc dù hàm tạo mặc định không được ghi lại. –
BoltClock
Và có, câu trả lời là trong lỗi mà bạn sẽ nhận được khi bạn cố gắng biên dịch mã của bạn. – BoltClock