My answer SOの質問の1つは、JITコンパイラでプロパティをインライン展開するとリフレクションが機能しなくなると主張するValentin Kuzubによってコメントされました。次のようにプロパティ/メソッドのインライン化とリフレクションへの影響
場合は、次のとおり
class Foo
{
public string Bar { get; set; }
public void Fuzz<T>(Expression<Func<T>> lambda)
{
}
}
Fuzz(x => x.Bar);
Fuzz
関数は、ラムダ式を受け取り、プロパティを見つけるためにリフレクションを使用します。拡張子がHtmlHelper
のMVCではよくあることです。
私は反射が、それがインライン化され、typeof(Foo).GetProperty("Bar")
がまだ有効PropertyInfo
を返しますBar
への呼び出しであるようBar
プロパティは、インライン化されます場合でも、作業を停止することはないと思います。
これを確認してください、または方法のインライン展開が間違っていますか?
Btw INotifyPropertyChangeの実装でlambdaを使用しない理由を示すこの興味深い記事が見つかりました。http://blog.quantumbitdesigns.com/2010/01/26/mvvm-lambda-vs-inotifypropertychanged-vs-dependencyobject/ –