Frage

ich auf diese lief und wundere mich, wenn jemand erklären könnte, warum dies in VB.NET funktioniert, wenn ich es nicht erwarten sollte, so wie es funktioniert 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?

ist nichts nicht die gleiche wie null ( Nothing = null -? LOL)? , oder ist dies nur verschiedenen Möglichkeiten, die gleiche Situation zwischen den beiden Sprachen Handhabung

Warum oder was behandelt wird unterschiedlich zwischen den beiden, die in einem dieser Ordnung macht, aber nicht die anderen?

[Update]

einige der Kommentare Da ich mit diesem etwas verwirrt ... es scheint, als ob Sie tatsächlich Nullable verwenden, wenn Sie etwas zu sein, null in VB.NET zulassen wollen ... 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 seltsam ...

War es hilfreich?

Lösung

Wenn ich mich richtig erinnere, ‚Nichts‘ in VB bedeutet „den Standardwert“. Für einen Werttyp, das ist der Standardwert für einen Referenz-Typen, das wäre null sein. So nichts auf eine Struktur zuordnen, ist kein Problem.

Andere Tipps

Nothing entspricht in etwa für den jeweiligen Typ default(T). (Just überprüft, und das gilt für Streicher als auch - d. H Nothing ist ein NULL-Verweis im Zusammenhang mit Strings)

Ich habe versucht, es auf MSDN zu suchen, konnte aber nichts relevant auf der VB Seite. Wenn für „Struktur“ auf C # sucht, gibt sie deutlich, dass es sich um einen Werttyp ist und nicht null zugeordnet werden kann, da ... es ist ein Wert.

Wenn jedoch auf VB.NET Stichwort „Struktur“ suchen sie sagt nicht, „Werttyp“. Stattdessen sagt sie

  

Die Struktur Anweisung definiert ein   Composite-Werttyp, können Sie   anpassen.

So ... Objekt?

Das wäre meine Vermutung. Ich möchte Verweise auf dieses Verhalten haben, konnte aber keine finden.

Auch structs sind Werttypen (ähnlich wie int, char, etc.) und sind somit nicht-Nullwerte enthalten.

Da eine Struktur aus möglicherweise mehr verschiedenen Typen gemacht (nicht einen einzigen Wert Typ, sondern eine möglichen Verbund aus mehreren verschiedenen Typen), zu fragen, ob es „nichts“ würde die Logik der Verwendung von „Nichts“ brechen . Nichts Tests unterschiedlich, je nach Typ, den Sie testen und daher ein komplexer Typ haftet nicht an die Logik der Verwendung von „Nothing“. Jedoch ist für diese Art von Tests, das heißt mit einer Struktur, alle seine Komponentenelemente an ihren jeweiligen „Nichts“ Werte haben, verwenden wir die Funktion „IsNothing“. Zum Beispiel:

Public Class Employees
    Public Structure EmployeeInfoType
       Dim Name As String    ' String
       Dim Age as Integer    ' Integer
       Dim Salary as Single  ' Single
    End Structure

    Private MyEmp as New EmployeeInfoType

    Public Function IsEmployeeNothing(Employee As EmployeeInfoType) As Boolean
       If **IsNothing**(Employee) Then
          Return True
       Else
          Return False
       End If
    End Function
End Class
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top