| 

.NET C# Java Javascript Exception

2
Welchen Typ hat null in C#? Es gilt:

string a = null;
object b = null;
Button c = null;

Aber:
var d = null; //das geht nicht
c = a; //geht offensichtlich auch nicht

Die Frage ist jetzt, welchen Typ null hat. Merkwüdig ist auch, dass obwohl a und c beide null sind, man a nicht nach c zuweisen kann. Also scheint null manchmal einen Typ zu haben und manchmal nicht.
News:
27.08.2009
sicco 179 2 4
4 Antworten
4
Laut ECMA-334 hat der null-Wert den Typ null.

§9.4.4.6:
The type of a null-literal is the null type (§11.2.7).


§11.2.7:
The null literal (§9.4.4.6) evaluates to the null value, which is used to denote a reference not pointing at any object or array, or the absence of a value. The null type has a single value, which is the null value. Hence an expression whose type is the null type can evaluate only to the null value. There is no way to explicitly write the null type and, therefore, no way to use it in a declared type.

Moreover, the null type can never be the type inferred for a type parameter (§25.6.4).
07.09.2009
stj 326 1 2
stj 326 1 2
Hier ist noch ein netter Link dazu (s. meine Kommentar vom 08.09.2009 und Erics Antwort.)
http://blogs.msdn.com/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx
stj 09.09.2009
2
Null ist kein Typ sondern "nichts". Die Zuweisungen funktionieren nicht da zB ein Objekt vom Typ Button nicht einem Objekt vom Typ String zugewiesen werden kann (dies prüft der Compiler). Auf IL-Ebene wäre das aber möglich (macht aber keinen Sinn und wird deshalb vom Compiler als Fehler indiziert).

var d = null funktioniert nicht weil der Compiler den Typ für d nicht ableiten kann (null ist eben nichts und hat keinen Typ).
27.08.2009
gfoidl 9,4k 3 5
0
Man benutze hierfuer nullable types.

int? i = null;
07.09.2009
stealth 61 1 1
0
Schließe mich stj an.

Sollte man mit
GetType
auch ermitteln können. (Schätze ich mal.)

In PHP geht's jedenfalls.
gettype(null) liefert: NULL
09.09.2009
MiW 1,0k 1 8
MiW 1,0k 1 8
Nur weil das in PHP geht, geht das in C# noch lange nicht. Das sind zwei konzeptionell stark unterschiedliche Sprachen.

Mit GetType kann man den Typen nicht ermitteln: Das null-Literal wird zum Wert null ausgewertet. Wenn man demnach GetType aufrufen wollte, würde das zu einer zu einer NullReferenceException zur Laufzeit führen.
Überhaupt ist mit dem der null-Type in C# kein CLR Typ assoziiert.
stj 10.09.2009
Ach, was Du nicht sagst.
PHP != C# ??? hätte ich ja nie für möglich gehalten.
Ich habe ja auch geschrieben, daß ich schätze, daß es eventuell so gehen könnte, weil es in einigen anderen Sprachen (habe mal PHP herausgepickt) einen TYP NULL gibt, der als einzigen Wert das Literal NULL zulässt.
In C++ ist NULL ein Zeiger ins Nirvana (in Delphi übrigens auch) und ist vom Typ einfach ein Zeiger.
Aber auch das ist ja kein Indiz für C#, wei lauch diese Sprachen "anders" sind.
Habe mir jetzt ein C#-Buch unters Kopfkissen gelegt um in Zukunft "fundierter" zu antworten zu können.
MiW 10.09.2009

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