typeof (T) kann null zurückgeben

8

Wenn Sie den Operator typeof für einen Typ verwenden, der mit TypeBuilder erstellt wurde, gibt der Operator null zurück.

Ich bin neugierig, warum das passiert und wie man das verhindert.

Ich fange an zu glauben, dass dies ein VS-Bug im unmittelbaren Fenster ist, aber ich bin mir nicht ganz sicher. Es ist sehr einfach, anderen zuerst die Schuld zu geben.

Ok ... Code um das Problem zu reproduzieren:

%Vor%

Wenn Sie nach der Variablen o einen Haltepunkt setzen und% VS_DE% in VS Immediate Windows eingeben, erhalten Sie das Problem.

    
redb 27.06.2011, 18:58
quelle

2 Antworten

19
  

Wenn der Operator typeof für einen Typ verwendet wird, der mit TypeBuilder erstellt wurde, gibt der Operator null zurück.

Zunächst ist die Behauptung richtig. Wenn Sie dieses Programm schreiben und es dann im Debugger stoppen und "typeof (MyType)" im unmittelbaren Fenster sagen, ist das Ergebnis, das zurückkommt, "null".

  

Ich bin neugierig, warum das passiert

Schlägt mich aus. Wenn ich raten müsste, würde ich vielleicht sagen, dass der Ausdruck-Evaluator mit dem Debugging-Subsystem der CLR kommuniziert, um ein Metadaten-Token für den Typ anhand seines Namens zu erhalten, und die CLR ein Garbage-Nil-Token zurückgibt, anstatt einen Fehler zu erzeugen .

Ich beeile mich zu betonen, dass dies eine Vermutung ist; Ich habe es nicht wirklich debuggt.

  

Ich fange an zu glauben, dass dies ein VS-Bug im unmittelbaren Fenster ist

Das scheint wahrscheinlich. Die richtige Sache, die es tun sollte, gibt den Fehler "der Typ oder der Namespace 'MyType' ist in diesem Bereich nicht gültig". Der Fehler wird mit ziemlicher Sicherheit im C # Laufzeitausdruck-Evaluator sein, nicht im unmittelbaren Fenster selbst.

Danke, dass Sie mich auf dieses Problem aufmerksam gemacht haben. Ich werde einen Fehler mit den Betreuern des Expression-Evaluators einreichen und wir werden sehen, ob sie das Problem beheben können.

  

Wie kann ich das verhindern?

Wenn es wehtut, wenn Sie "typeof (MyType)" eingeben, dann tippen Sie das ein.

    
Eric Lippert 27.06.2011, 20:35
quelle
5
  

Wenn Sie nach der Variablen 'o' einen Haltepunkt einfügen und typeof (MyType) in VS Immediate Windows eingeben, erhalten Sie das Problem.

Nun, ja. MyType hat kein Symbol (Sie definieren es mit Reflektion!), Sie können also typeof nicht verwenden.

Bearbeiten: Zur Klarstellung gibt es genau eine Zeit, wo Sie typeof verwenden können und einen Runtime-created Typ erhalten: Wenn Sie Generics verwenden.

%Vor%     
Mike Caron 27.06.2011 19:22
quelle

Tags und Links