In C#/.NET 4.0 Ich versuche, mit einem Feldwert durch Reflektion abzurufen: verwirrt durch die SituationFieldInfo.GetValue gibt NULL für ein privates Mitglied zurück, während der Debugger angibt, dass das Feld nicht null ist?
var bar = foo.GetType()
.GetField("_myField", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(foo)
Ich bin ein bisschen. Der zurückgegebene Wert ist null
, und dennoch ist das Feld (wenn es durch den Debugger beobachtet wird) nicht null. Noch verwirrender, der Code hier oben funktioniert für die anderen Objekteigenschaften.
Der einzige ungerade Aspekt sind die beiden Fahnen IsSecurityCritical
und IsSecuritySafeCritical
die true
sind, aber ich bin nicht einmal sicher, dass es auf die Situation tatsächlich relevant ist.
Ich komme in einer solchen Situation mit einem kleinen HttpModule.
public class MyModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += BeginRequest;
}
void BeginRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
var rawContent = typeof(HttpRequest)
.GetField("_rawContent", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(app.Request);
// at this point 'rawContent' is null, while debugger indicates it is not.
}
}
Jeder Vorschlag, der ein solches Verhalten erklären könnte?
Der Debugger manchmal Codepfade trifft, die Sie nicht erwarten, und sehen nicht unter normalen Bedingungen (wie die ToString() Methoden, Sachen verzögertes Laden, etc...). Die einzige Möglichkeit, in diesen Situationen zu überprüfen, ob der Code ordnungsgemäß ausgeführt wird, besteht darin, einen Test ohne ein angehängtes Debug-Programm durchzuführen. Das ist die Heisenberg-Unschärferelation, die auf die .NET-Programmierung angewendet wird :-) –
Ist der Feldtyp eine Nullable? (IE: int ?, bool ?, usw.) –
Feld ist nicht nullable. –