Asp.net mvc 为什么在ASP.NET MVC中使用lambdas而不是反射?

Asp.net mvc 为什么在ASP.NET MVC中使用lambdas而不是反射?,asp.net-mvc,reflection,lambda,Asp.net Mvc,Reflection,Lambda,使用Asp.NETMVC已经有一段时间了,但是我被一个非常奇怪的问题困住了。每次创建模型时,我都会使用lambda表达式,如: @Html.EditorFor(model=>model.SomeProperty) 为什么Asp.NETMVC使用这种类型的体系结构 为什么我不能使用反射传入属性 使用lambda表达式是否更快?因为在后台,我认为要获得属性名,必须使用反射。Lambda>反射 使用lambdas,您可以获得: 设计时,强类型属性选择器 使用内置的VisualStudio重构

使用Asp.NETMVC已经有一段时间了,但是我被一个非常奇怪的问题困住了。每次创建模型时,我都会使用lambda表达式,如:

@Html.EditorFor(model=>model.SomeProperty)
为什么Asp.NETMVC使用这种类型的体系结构

为什么我不能使用反射传入属性

使用lambda表达式是否更快?因为在后台,我认为要获得属性名,必须使用反射。

Lambda>反射

使用lambdas,您可以获得:

  • 设计时,强类型属性选择器
  • 使用内置的VisualStudio重构工具,重构变得很容易
多亏了lambdas,任何API都可以从属性选择器了解很多东西:

  • 属性类型
  • 财产的对象
  • 检查属性元数据
此外,请检查方法签名():

public静态MvcHtmlString编辑器(
这个HtmlHelper html,
表情
)
它是一个表达式树,而不是一个普通的lambda。这允许MVC(以及任何API)操纵表达式,以便在运行时调用之前添加更多行为,而无需反射

了解有关表达式树的详细信息:


    • 我的答案不会受欢迎

      我相信Lambda的99%总是更好的选择,原因有三

      首先,假设您的开发人员很聪明绝对没有错。其他答案有一个基本前提,即除了你之外,每个开发人员都是愚蠢的。不是这样

      第二,Lamdas(等)是一种现代语法——明天它们将比今天更为常见。项目的代码应该来自当前和新兴的约定

      第三,以“老式方式”编写代码对您来说可能更容易,但对编译器来说却不容易。这一点很重要,传统方法几乎没有改进的机会,因为编译器是修订版。Lambdas(等人)依赖于编译器来扩展它们,随着时间的推移,编译器可以更好地处理它们

      总而言之:

    • 开发人员可以处理它
    • 每个人都在这样做
    • 未来还有潜力

    • 同样,我知道这不会是一个流行的答案。相信我,“简单就是最好的”也是我的口头禅。维护是任何来源的一个重要方面。我明白了。但我认为我们用一些陈词滥调的经验法则掩盖了现实。

      你是否更愿意为razor视图中的每个标签/编辑/显示使用类似于
      @Html.EditorFor(typeof(ParvsModel).GetProperty(“SomeProperty”)、BindingFlags.Public的东西?你可以使用@Html.Editor(“SomeProperty”),但是lambda版本适用于喜欢强类型的人。我最近在一篇博客文章中也谈到了这个话题:
      
      public static MvcHtmlString EditorFor<TModel, TValue>(
          this HtmlHelper<TModel> html,
          Expression<Func<TModel, TValue>> expression
      )