6

使用 Asp.Net MVC 已经有一段时间了,但我遇到了一个非常奇怪的问题。每次创建模型时,我都会使用 lambda 表达式,例如:

@Html.EditorFor(model=>model.SomeProperty)

为什么 Asp.Net MVC 使用这种类型的架构?

为什么我不能只使用反射传入一个属性?

使用 lambda 表达式更快吗?因为在幕后,我认为要获得属性名称,它必须使用反射。

4

2 回答 2

9

Lambda > 反射

使用 lambdas 你得到:

  • 设计时的强类型属性选择器。
  • 使用内置的 Visual Studio 重构工具使重构变得容易。

多亏了 lambdas,任何 API 都可以从属性选择器中知道很多事情:

  • 属性类型。
  • 属性的对象。
  • 检查属性元数据。

另外,检查方法签名(http://msdn.microsoft.com/en-us/library/ee402949(v=vs.108).aspx):

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

它是一个表达式树,而不是一个常规的 lambda。这允许 MVC(以及任何 API)操作表达式,以便在运行时调用它之前添加更多行为,而无需反射发射。

了解有关表达式树的更多信息:

于 2013-02-08T08:52:42.553 回答
1

我的回答不会受欢迎。

我相信 Lambda 的 99% 始终是更好的选择,原因有以下三个。

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

其次,Lamdas (et al) 是一种现代语法——明天它们将比现在更普遍。您的项目代码应该来自当前和新兴的约定。

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

总结一下:

  1. 开发人员可以处理
  2. 每个人都在做
  3. 有未来的潜力

Again, I know this will not be a popular answer. And believe me "Simple is Best" is my mantra, too. Maintenance is an important aspect to any source. I get it. But I think we are overshadowing reality with some cliché rules of thumb.

于 2013-09-11T12:27:03.487 回答