| 

.NET C# Java Javascript Exception

2
Hallo zusammen,

ich habe gerade folgendes entdeckt:

<TestMethod()>
Public Sub CheckBool()

Dim b1 As Boolean
Assert.IsFalse(b1) ' KLAPPT

b1 = True
Assert.IsTrue(b1) ' KLAPPT

b1 = Nothing
Assert.IsFalse(b1) ' KLAPPT
' Assert.IsNull(b1) ' KLAPPT NICHT

Dim i As Integer = 5
i = Nothing

Assert.AreEqual(i, 0) ' KLAPPT

End Sub


Dieser Test läuft durch. ... Hmm ich finde es sehr merkwürdig, daß man Typen einfach "Nothing" zuweisen kann, und dann der Defaultwert des Datentypes gesetzt wird. Was ist dass denn für ein Feature? Hat da jemand eine Erklärung für?

Also, ich weiß schon, warum die Abfrage auf "Nothing" nicht funktioniert! Ich würde gerne wissen, warum die ZUWEISUNG ERLAUBT IST!

LG.
News:
15.10.2012
TiMeBaNDiT76 294 2 7
2 Antworten
2
Tja, Nothing ist halt nicht dasselbe wie null. Vielleicht sollte es besser Default heißen:

For non-nullable value types, Nothing in Visual Basic differs from null in C#. In Visual Basic, if you set a variable of a non-nullable value type to Nothing, the variable is set to the default value for its declared type.

http://msdn.microsoft.com/de-de/library/0x9tb07z.aspx

Klingt komisch, ist aber so...
15.10.2012
Matthias Hlawatsch 13,2k 4 9
1
Soweit mir bekannt ist, greift bei der Zuweisung des Wertes Nothing das "Boxing" in VB.NET, d.h. der ursprüngliche Datentyp wird implizit in ein Objekt gepackt. Bei diesem Vorgang wird auch der Standardwert des Datentyps gesetzt.
Wird später eine erneute Abfrage auf den Datentyp gemacht, dann wird der Datentyp wieder "entpackt". Deshalb sind die Tests erfolgreich.
In VB.NET kann jeder "primitive" Datentyp in ein Objekt gekapselt werden. Man wollt damit wohl vermeiden, dass am Anfang jedes Datentyps der Type Object steht.
15.10.2012
edvservice 1,4k 1 6

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH