【发布时间】:2011-07-14 10:34:07
【问题描述】:
Valentin Kuzub 对我的answer 对 SO 的一个问题发表了评论,他认为 JIT 编译器内联属性将导致反射停止工作。
案例如下:
class Foo
{
public string Bar { get; set; }
public void Fuzz<T>(Expression<Func<T>> lambda)
{
}
}
Fuzz(x => x.Bar);
Fuzz 函数接受 lambda 表达式并使用反射来查找属性。这是 MVC 在 HtmlHelper 扩展中的常见做法。
我认为即使Bar 属性被内联,反射也不会停止工作,因为它是对Bar 的调用,它将被内联,typeof(Foo).GetProperty("Bar") 仍将返回一个有效的PropertyInfo。
您能否确认一下,或者我对方法内联的理解是错误的?
【问题讨论】:
-
顺便说一句,我发现这篇有趣的文章显示了在 INotifyPropertyChange 实现中不使用 lambda 的其他原因blog.quantumbitdesigns.com/2010/01/26/…
标签: c# reflection inlining