C#/ .NET 4.0では、リフレクションを使用してフィールド値を取得しようとしています。
var bar = foo.GetType()
.GetField("_myField", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(foo)
私は状況に少し戸惑っています。返される値はですがnull
、フィールド(デバッガーで観察した場合)はnullではありません。さらに不可解なことに、上記のコードは他のオブジェクトプロパティでも機能します。
唯一の奇妙な側面は2つのフラグ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.
}
}
そのような振る舞いを説明する提案はありますか?