2010-07-09 10 views
14

Niedawno w poprzednim projekcie natknąłem się na szczególną różnicę między VB.NET i C#.Nic! = Null - czy to prawda?

Rozważmy następujący wyraz C#, który:

null <= 2 

wyrażenie to Fałsz która jest co by się spodziewać. Następnie odpowiedni wyraz VB.NET:

Nothing <= 2 

Byłem zaskoczony, aby dowiedzieć się, że to wyrażenie faktycznie ma wartość Prawdziwego

Wydaje się dość fundamentalnej decyzji projektowej między dwoma językami i na pewno złapany odpadam.

Czy ktoś może mi powiedzieć, dlaczego? Czy null i Nic jedno i to samo? Jeśli tak, dlaczego zachowują się inaczej?

+4

'null <= 2' generuje ostrzeżenie w czasie kompilacji w języku C# i żaden element IL odpowiadający tej operacji nigdy nie jest wysyłany do zespołu wyjściowego. –

+0

wypróbuj wyrażenie w LINQPAD - wyobraź sobie, że null jest rzeczywiście int? wartość, która ma wartość zerową. –

+0

Powiązane pytanie (choć niekoniecznie to samo): http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net –

Odpowiedz

30

Nothing w VB jest wartością domyślną dla danego typu. (Szczegółowe informacje można znaleźć w części: this link).

Dla porównania liczby całkowitej (którą kompilator przyjmuje z prawego argumentu), Nothing będzie zatem 0. 0 <= 2 jest prawdziwe z bardziej oczywistych powodów :-)

+2

Warto również wspomnieć, że Nic nie jest również używane do kontroli zerowych w połączeniu z operatorami Is i IsNot. –

+2

Dla completelyness: co robi kompilator z kodem C#? '(object) null' nie pozwala na porównanie z liczbą całkowitą,' Int32' nie może mieć wartości null ...? –

+0

Pobiłeś mnie, gdy szukałem odpowiedzi. I masz ten sam link: P –

Powiązane problemy