Tôi biết rằng có thể có các loại giá trị Nullable kết thúc tốt kiểu giá trị và cung cấp khả năng lưu trữ null. Nhưng có lý do kỹ thuật nào không cho phép loại giá trị là không hoặc lý do chỉ là khái niệm?Tại sao các loại giá trị không thể là rỗng
Trả lời
Loại tham chiếu được lưu dưới dạng tham chiếu (như con trỏ) cho một đối tượng đối tượng.
null
có nghĩa là tham chiếu không trỏ đến một thể hiện của đối tượng.
Loại giá trị được lưu trữ dưới dạng giá trị mà không có bất kỳ tham chiếu nào.
Do đó, không có ý nghĩa khi có một kiểu giá trị null
— loại giá trị theo định nghĩa chứa một giá trị.
Nullable<T>
là loại giá trị có cờ HasValue
có thể là false
để cho biết rằng không có giá trị. Giá trị này vẫn có giá trị (khi HasValue
là false
, Value
là default(T)
), nhưng cờ HasValue
cho bạn biết bỏ qua giá trị.
Không có gì để làm với null
, ngoại trừ CLR tự động mở hộp số null
được đóng hộp thành Nullable<T>
với HasValue
được đặt thành false
.
Loại giá trị như 'Int32' được lưu trữ bằng cách sử dụng ba mươi hai bit dung lượng lưu trữ. Có chính xác 4,294,967,296 giá trị có thể được đại diện bởi 32 bit, và Int32 có thể chứa 4,294,967,296 giá trị khác nhau. Nếu -2,147,483,648 không phải là giá trị Int32 hợp lệ, nó có thể có thể sử dụng để đại diện cho "null", nhưng thực tế là biểu diễn nhị phân của nó không phải là tất cả các số không sẽ làm phức tạp mọi thứ. Ngược lại, số lượng các kết hợp bit có thể có trong một loại tham chiếu vượt quá số lượng các tham chiếu hợp lệ có thể có, do đó không khó để đặt trước một kết hợp bit để biểu diễn "null".
Bất kỳ tham chiếu nào (bài viết) về những gì bạn đang giải thích? Tôi vẫn chưa rõ về ý tưởng bạn đặt. – Marshal
- 1. Tại sao System.Enum không phải là một loại giá trị?
- 2. tại sao tệp Files.probeContentType trả lại giá trị rỗng
- 3. Các loại giá trị kế thừa từ System.Object ... tại sao?
- 4. Loại truyền đến loại giá trị 'Thập phân' không thành công vì giá trị vật hoá là rỗng
- 5. Tại sao tôi không thể nhập từ điển của một loại giá trị vào từ điển của một loại giá trị khác khi các loại giá trị có thể được truyền từ một loại giá trị khác?
- 6. PHP loại bỏ rỗng, null Mảng/giá trị mảng trong khi vẫn giữ khóa/giá trị không rỗng/null
- 7. Tại sao tôi không thể khai báo một danh sách chung là không có giá trị?
- 8. Các loại giá trị không thể thay đổi
- 9. Định dạng các giá trị 0 là Chuỗi rỗng?
- 10. Tại sao phần bên trái của tôi không trả về giá trị rỗng?
- 11. Loại có thể là loại tham chiếu và loại giá trị cùng một lúc không?
- 12. Trong Actionscript 3, tại sao là loại động của các giá trị int lớn Số?
- 13. Loại bỏ các giá trị chuỗi rỗng/rỗng trong một mảng C#
- 14. Tại sao tôi không thể gán giá trị 'dài' trị giá 4 tỷ?
- 15. Tại sao chúng ta không thể khóa trên một loại giá trị?
- 16. Oracle không phân biệt giữa các giá trị rỗng và các chuỗi rỗng?
- 17. JSON có nên bao gồm các giá trị rỗng không
- 18. Có thể WebResponse.GetResponseStream() trả về giá trị rỗng không?
- 19. Tại sao tôi không thể sử dụng loại tham chiếu làm loại giá trị của loại vùng chứa?
- 20. Tại sao không ủy nhiệm công việc đối nghịch với các loại giá trị?
- 21. Giá trị rỗng của khung thực thể trong truy vấn
- 22. Tại sao truyền tới đối tượng khi so sánh với giá trị rỗng?
- 23. Trợ giúp với lỗi C# generics - "Loại 'T' phải là loại giá trị không thể null"
- 24. Tại sao hàm tạo mặc định không xuất hiện cho các loại giá trị?
- 25. Tại sao ngoại lệ BlackBerry của tôi getMessage() trả lại giá trị rỗng?
- 26. Tại sao Nullable <T> được coi là một loại giá trị?
- 27. Tại sao Perl sử dụng chuỗi rỗng để biểu thị giá trị sai boolean?
- 28. Rails, tại sao tham gia trả về mảng với các giá trị không phải là uniq?
- 29. Hàm tạo chuỗi có giá trị rỗng
- 30. T-SQL: chọn các hàng không bằng một giá trị, bao gồm cả giá trị rỗng
chúng tôi có thể tạo các biến nullable bằng cách sử dụng? nhà điều hành. ví dụ, int? x = null; – Shekhar
@Shekhar: Anh ấy nhận ra điều đó. Nó không liên quan gì đến 'null'. – SLaks
cảm ơn bạn đã giải thích. – Shekhar