I'm wondering if properties of the `Expression` class and its subclasses (`UnaryExpression`, `MemberExpression`, etc.) are collapsed to inline constant objects during compilation?

For example in ASP.Net MVC it's common practice to strong-type property names of viewmodels, such as `Html.LabelFor(vm => vm.FirstName))`, and `Html.LabelFor` expects an Expression, for which it then inspects `Body.Member.Name`, etc. Are those properties evaluated at runtime (with the runtime compilation cost, etc.) or are they optimized during compilation (like `[CallerMemberName]` in .Net 4.5)?