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.
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.
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.