natknąłem to i zastanawiałem się, czy ktoś może wyjaśnić, dlaczego to działa w VB.NET, gdy Spodziewam się, że nie powinien, tak jak to robi w C#C# vs VB.NET - Postępowanie z zerowymi Structures
//The C# Version
struct Person {
public string name;
}
...
Person someone = null; //Nope! Can't do that!!
Person? someoneElse = null; //No problem, just like expected
Ale wtedy w VB.NET ...
Structure Person
Public name As String
End Structure
...
Dim someone As Person = Nothing 'Wha? this is okay?
Nic nie jest taka sama, jak wartość null (Nic = null -! LOL), czy jest to po prostu różne sposoby obchodzenia się z samą sytuację między dwa języki?
Dlaczego lub co jest obsługiwane w różny sposób między tymi dwoma, które sprawiają, że wszystko jest w porządku, ale nie drugie?
[Aktualizacja]
Biorąc pod uwagę niektóre komentarze, mam pomieszane z tym nieco bardziej ... wydaje się, że rzeczywiście trzeba używać pustych jeśli chcesz zezwolić na coś być null w VB NET ... tak na przykład ...
'This is false - It is still a person'
Dim someone As Person = Nothing
Dim isSomeoneNull As Boolean = someone.Equals(Nothing) 'false'
'This is true - the result is actually nullable now'
Dim someoneElse As Nullable(Of Person) = Nothing
Dim isSomeoneElseNull As Boolean = someoneElse.Equals(Nothing) 'true'
zbyt dziwne ...
Po prostu natknąłem się podczas portowania niektórych VB.NET do C# - sprawia, że nienawidzę VB.NET o wiele więcej;). Dziękuję za wkopanie się w to i dzięki tym, którzy odpowiedzieli. – Charles
Zobacz także http://stackoverflow.com/questions/5869661/why-can-i-not-check-if-datetime-is-nothing – jeroenh
@Charles, czy powinienem nienawidzić C# za bycie innym niż VB? Niektórzy ludzie rozwiązują problemy. Niektóre winią języki za to, że są różne. – Dima