(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Boxing von Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)

Objekte, die auf Typen basieren, die NULL-Werte zulassen, werden nur geschachtelt, wenn das Objekt nicht NULL ist. Wenn HasValue den Wert false aufweist, wird das Objekt nicht geschachtelt. Stattdessen wird der Objektverweis einfach null zugewiesen. Zum Beispiel:

bool? b = null;
object o = b;
// Now o is null.

Wenn das Objekt nicht NULL ist – wenn HasValue den Wert true aufweist –, findet das Boxing statt, es wird aber nur der zugrunde liegende Typ geschachtelt, auf dem das auf NULL festlegbare Objekt basiert. Beim Schachteln eines auf NULL festlegbaren Werttyps, der nicht NULL lautet, wird der Werttyp selbst und nicht das System.Nullable<T> geschachtelt, das den Werttyp umschließt. Zum Beispiel:

bool? b = false;
int? i = 44;
object bBoxed = b; // bBoxed contains a boxed bool.
object iBoxed = i; // iBoxed contains a boxed int.

Die zwei geschachtelten Objekte sind identisch mit den Objekten, die durch das Schachteln von nicht auf NULL festlegbaren Typen erstellt werden. Und wie nicht auf NULL festlegbare geschachtelte Typen können sie mittels Unboxing in auf NULL festlegbare Typen konvertiert werden. Beispiel:

bool? b2 = (bool?)bBoxed;
int? i2 = (int?)iBoxed;

Das Verhalten von auf NULL festlegbaren geschachtelten Typen bietet zwei Vorteile:

  1. Auf NULL festlegbare Objekte und ihre geschachtelten Entsprechungen können auf NULL-Werte getestet werden:

      bool? b = null;
      object boxedB = b;
      if (b == null)
      {
        // True.
      }
      if (boxedB == null)
      {
        // Also true.
      }
    
  2. Geschachtelte auf NULL festlegbare Typen unterstützen vollständig die Funktionen des zugrunde liegenden Typs:

      double? d = 44.4;
      object iBoxed = d;
      // Access IConvertible interface implemented by double.
      IConvertible ic = (IConvertible)iBoxed;
      int i = ic.ToInt32(null);
      string str = ic.ToString();
    

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft