W VB.NET, jaka jest różnica międzyJaka jest różnica między "foo = Nothing" i "foo is Nothing" w VB.NET?
if foo is Nothing Then
doStuff()
End If
i
if foo=Nothing Then
doStuff()
End If
aktualizacji Otrzymałem następującą odpowiedź:
foo is Nothing
po prostu sprawdza czyfoo
nie jest przypisane do żadnego odniesienia.foo = Nothing
sprawdza, czy referencja posiadana przezfoo
jest równanothing
.
Po uruchomieniu trzy oświadczenia,
Dim foo as Object
Dim bar as Integer
foo = bar
foo is Nothing
wartość false i foo = Nothing
wartość true.
Jednak jeśli bar
jest zadeklarowana jako Object
i nie zainicjowany, następnie foo is Nothing
i foo = Nothing
zarówno oceny true! Myślę, że to dlatego, że Integer
jest typem wartości, a Object
jest typem odniesienia.
W przypadku ciągów = i daje różne wyniki, daresay = realizuje się z zasadą najmniejszego zaskoczenia dla ciągów, więc uważam, że jest to poprawne. –
@Lasse: Tak, łańcuchy znaków są szczególnym przypadkiem w VB, ponieważ '=' wywoła specjalną metodę zamiast 'Equals', która potraktuje" Nic "jako równy pustemu łańcuchowi znaków. –
Zapomniałeś Nullable (Of T). Dla tego 'foo = Nothing' skompiluje się, ale daje złą odpowiedź. –