2010-07-09 18 views
14

Gần đây trong một dự án trước, tôi đã xem xét một sự khác biệt đặc biệt giữa VB.NET và C#.Không có gì! = Null - hay không?

Hãy xem xét những biểu hiện # C sau đó:

null <= 2 

biểu hiện này đánh giá để False đó là những gì tôi mong đợi. Sau đó, biểu thức VB.NET tương ứng:

Nothing <= 2 

Tôi rất ngạc nhiên khi biết rằng biểu hiện này thực sự đánh giá để Đúng

Nó có vẻ như một quyết định thiết kế khá cơ bản giữa hai ngôn ngữ và nó chắc chắn bị bắt tôi ra ngoài.

Có ai có thể cho tôi biết lý do không? Có null và Không có gì giống nhau không? Nếu có, tại sao chúng hoạt động khác nhau?

+4

'null <= 2' tạo cảnh báo thời gian biên dịch trong C# và không có IL tương ứng với thao tác này được phát ra trong assembly đầu ra. –

+0

thử một biểu thức trong LINQPAD - tưởng tượng null thực sự là một int? giá trị của ai sẽ là rỗng. –

+0

Câu hỏi liên quan (mặc dù không chính xác giống nhau): http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net –

Trả lời

30

Nothing trong VB đánh giá giá trị mặc định cho một loại nhất định. (Xem this link để biết chi tiết.)

Để so sánh số nguyên (trình biên dịch sẽ giả định từ toán hạng bên phải), Nothing do đó sẽ là 0. 0 <= 2 là đúng vì các lý do rõ ràng hơn :-)

+2

Nó cũng đáng nói đến là không có gì cũng được sử dụng để kiểm tra null khi kết hợp với các toán tử Is và IsNot. –

+2

Để hoàn toàn: trình biên dịch với mã C# là gì? '(đối tượng) null' không cho phép so sánh với một số nguyên,' Int32' không thể rỗng ...? –

+0

Bạn đánh tôi trong khi tôi đang tìm câu trả lời. Và bạn có cùng một liên kết: P –

Các vấn đề liên quan