2010-05-14 5 views
9

Kann mir jemand eine Liste geben oder auf eine Liste von C# -Datentypen verweisen, die ein NULL-fähiger Typ sein kann?Welche C# -Datentypen können NULL-Typen sein?

Zum Beispiel:

  • Ich weiß, dass Nullable<int> ok ist
  • Ich weiß, dass Nullable<byte[]> nicht.

Ich möchte wissen, welche Typen Nullable sind und welche nicht. Übrigens, ich weiß, dass ich das zur Laufzeit testen kann. Dies ist jedoch für einen Code-Generator, den wir schreiben, so dass ich keinen tatsächlichen Typ habe. Ich weiß nur, dass eine Spalte string oder int32 (etc) ist.

+1

'Nullable ' ist nicht in Ordnung, weil Arrays Referenztypen sind (auch wenn der Typ sie ein Werttyp enthalten ist). Beachten Sie, dass Sie 'byte [] b = null 'tun können. – fearofawhackplanet

Antwort

20

Alle Werttypen (außer Nullable<T> selbst) können in nullfähigen Typen verwendet werden - d. H. Alle Typen, die von System.ValueType abgeleitet sind (einschließlich enum s!).

Der Grund dafür ist, dass Nullable etwas wie folgt erklärt:

struct Nullable<T> where T : struct, new() { … } 
+3

@OP: ... weil der Kernpunkt darin besteht, das Problem zu beheben (ich würde es als einen wichtigen Konstruktionsfehler bezeichnen; andere würden nicht zustimmen), dass Werttypen nicht nullfähig sind. (http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx) Und sie haben sicher nichts geholfen, indem sie es 'Nullable' nannten!Aufgrund von Dingen genau wie Ihre Frage "Welche Arten sind Nullable?" Antwort: Referenztypen sind nullfähig. Werttypen sind kompatibel mit "Nullable", was das Gegenteil ist. * seufz * ;-) –

+2

@TJCrowder: Ich für meinen Teil würde nicht zustimmen ... –

+4

Kleiner Nitpick: Alle Werttypen * außer * der NULL-Typ selbst. dh das folgende ist nicht gültig: var i = neue Nullable >(); –

1

Es kann ein beliebiger Werttyp einschließlich Struktur sein, es kann kein Referenztyp sein, wie die von Natur aus sind NULL-Werte zulassen bereits.

Ja: Int32 Doppel Datetime CustomStruct usw.

No: String Array Custom usw.

Weitere Informationen finden Sie im MSDN: http://msdn.microsoft.com/en-us/library/2cf62fcy(v=VS.80).aspx

+0

"Es kann ein beliebiger Werttyp sein, einschließlich struct" - nun, außer für die 50% der verfügbaren Strukturen, die 'Nullable '; p –

2

A-Typ Es wird gesagt, dass es nullfähig sein kann, wenn es einen Wert zugewiesen werden kann oder null zugewiesen werden kann bedeutet, dass der Typ überhaupt keinen Wert hat. Folglich kann ein nullwertfähiger Typ einen Wert ausdrücken, oder kein Wert existiert. Ein Referenztyp wie String ist beispielsweise nullfähig, ein Werttyp wie Int32 hingegen nicht. Ein Werttyp kann nicht nullfähig sein, da er über genügend Kapazität verfügt, um nur die für diesen Typ geeigneten Werte auszudrücken. es hat nicht die zusätzliche Kapazität, die erforderlich ist, um einen Wert von null auszudrücken.

Die Nullable-Struktur unterstützt nur die Verwendung eines Werttyps als Nullable-Typ, da Referenztypen vom Design auf Null gesetzt werden können.

Die Nullable-Klasse bietet ergänzende Unterstützung für die Nullable-Struktur. Die Nullable-Klasse unterstützt das Abrufen des zugrunde liegenden Typs eines Nullable-Typs sowie Vergleichs- und Gleichheitsoperationen für Paare nullfähiger Typen, deren zugrunde liegender Wertetyp generische Vergleichs- und Gleichheitsoperationen nicht unterstützt.

Von Hilfe Docs http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

Verwandte Themen