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