В C # / .NET 4.0 я пытаюсь получить значение поля через отражение с помощью:
var bar = foo.GetType()
.GetField("_myField", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(foo)
Я немного озадачен ситуацией. Возвращаемое значение равно null
, и все же поле (при наблюдении через отладчик) не равно нулю. Еще более загадочный код, приведенный выше, работает для других свойств объекта.
Единственным странным аспектом являются два флага IsSecurityCritical
и IsSecuritySafeCritical
, которые true
, но я даже не уверен, что это действительно имеет отношение к ситуации.
Я попал в такую ситуацию с небольшим 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.
}
}
Есть ли какие-либо предположения, объясняющие такое поведение?