C# vs VB.NET - Umgang mit null-Strukturen
Ich lief über diese und wollte Fragen ob mir jemand erklären könnte, warum das funktioniert VB.NET wenn ich erwarten würde, sollte er Versagen, so wie es in C#
//The C# Version
struct Person {
public string name;
}
...
Person someone = null; //Nope! Can't do that!!
Person? someoneElse = null; //No problem, just like expected
Aber dann in VB.NET...
Structure Person
Public name As String
End Structure
...
Dim someone As Person = Nothing 'Wha? this is okay?
Nichts ist nicht dasselbe wie null (Nichts != null - LOL?)oder ist das einfach nur unterschiedliche Wege im Umgang mit der gleichen situation zwischen den beiden Sprachen?
Warum oder was wird anders behandelt, zwischen den beiden, das macht das okay, aber das andere nicht?
[Update]
Gegeben, einige der Kommentare, habe ich Durcheinander gebracht mit diesem ein bisschen mehr... es scheint, als ob Sie tatsächlich haben, um die Verwendung von Nullable, wenn Sie wollen, zu erlauben, etwas zu null VB.NET... so zum Beispiel...
'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'
Zu komisch...
InformationsquelleAutor der Frage Hugoware | 2008-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich mich richtig erinnere, "Nothing" in VB bedeutet "den default-Wert". Für einen Wert geben, das ist der default-Wert für eine Referenz geben, das wäre null. So, zuweisen von nichts eine Struktur, ist überhaupt kein problem.
InformationsquelleAutor der Antwort BFree
Nothing
entspricht ungefährdefault(T)
für den entsprechenden Typ. (Gerade überprüft, und das gilt auch für strings, d.h.Nothing
ist ein null-Verweis in den Kontext von Zeichenfolgen).InformationsquelleAutor der Antwort Jon Skeet
Ich habe versucht, zu suchen für die es auf der MSDN-Website, konnte aber nicht finden, alles relevante auf der VB-Seite. Bei der Suche nach "struct" in C#, die es klar gibt, dass es einen Wert Geben und können nicht zugeordnet werden null, da... es ist ein Wert.
Aber, wenn Suche auf VB.NET Stichwort "Struktur", es heißt nicht "Wert-Typ". Stattdessen heißt es
So... Objekt?
Das wäre meine Vermutung. Ich hätte gerne Verweise auf dieses Verhalten an, konnte aber keine finden.
InformationsquelleAutor der Antwort Maxime Rouiller
Auch structs sind value-Typen (ähnlich wie int, char, etc.) und damit sind nicht-null-Werte zulässt.
InformationsquelleAutor der Antwort Dana
Weil eine Struktur besteht aus möglicherweise verschiedenen Typen (nicht einen einzigen Wert Geben, aber eine mögliche composite mehreren verschiedenen Arten), um zu Fragen, ob es "Nichts" brechen würde die Logik der Verwendung von "Nichts". Nichts tests unterschiedlich, je nach Typ, den Sie testen wollen und daher ein komplexer Typ hält nicht an der Logik der Verwendung des "Nichts". Jedoch für diese Art der Prüfung, D. H., mit einer Struktur, die alle Ihre Mitglieder an Ihren jeweiligen "Nichts" - Werte, verwenden wir die Funktion "IsNothing". Zum Beispiel:
InformationsquelleAutor der Antwort piBoss