C# HTML助手lambda查询

C# HTML助手lambda查询,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有一个关于如何计算lambda表达式中的参数类型的查询 如果我们查询的是Customer类型的IEnumerable,并且有customers.Where(c=>c.City==“London”)这样的语句,那么c是Customer类型的 在ASP.NET MVC 3中使用的HTML帮助程序中,如果在强类型视图中有类似HTML.TextBoxFor(c=>c.Foo)的语句,则c是视图绑定的类型 我不明白的是编译器和VisualStudioIntelliSense如何知道lambda中参数的类

我有一个关于如何计算lambda表达式中的参数类型的查询

如果我们查询的是Customer类型的IEnumerable,并且有customers.Where(c=>c.City==“London”)这样的语句,那么c是Customer类型的

在ASP.NET MVC 3中使用的HTML帮助程序中,如果在强类型视图中有类似HTML.TextBoxFor(c=>c.Foo)的语句,则c是视图绑定的类型

我不明白的是编译器和VisualStudioIntelliSense如何知道lambda中参数的类型。MSDN文档说“编译器可以根据lambda主体、底层委托类型以及C语言规范中描述的其他因素推断类型”。但是,我不知道lambda主体或委托类型如何允许编译器确定参数的数据类型


干杯,

如果您查看etc的类型,您会发现参数1不是
Func
(已编译的委托),而是可以在运行时从中编译委托的数据结构

或者直接检查它在做什么。在本例中,确保它实际上是一个access表达式,然后读取属性的名称以允许HTML引用该名称,然后再获取一个委托以获取属性的值



1作为扩展方法,第一个参数是它应用的类型,第二个声明的参数是声明时的第一个参数。

如果查看etc的类型,您会发现参数1不是
Func
(编译委托),但实际上它是一种数据结构,委托可以在运行时从中编译

或者直接检查它在做什么。在本例中,确保它实际上是一个access表达式,然后读取属性的名称以允许HTML引用该名称,然后再获取一个委托以获取属性的值


1作为扩展方法,第一个参数是它应用的类型,第二个声明的参数是声明时的第一个参数。

Description 他们知道这一点,因为该方法定义了一个表达式

样品 此方法需要一个表达式,该表达式将导致double类型的属性

public static MvcHtmlString MethodName<TModel>(
    this HtmlHelper<TModel> instance, 
    TModel model, 
    Expression<Func<TModel,double>> selector)
{

}
public静态MvcHtmlString方法名(
此HtmlHelper实例,
TModel模型,
表达式选择器)
{
}
更多信息
说明 他们知道这一点,因为该方法定义了一个表达式

样品 此方法需要一个表达式,该表达式将导致double类型的属性

public static MvcHtmlString MethodName<TModel>(
    this HtmlHelper<TModel> instance, 
    TModel model, 
    Expression<Func<TModel,double>> selector)
{

}
public静态MvcHtmlString方法名(
此HtmlHelper实例,
TModel模型,
表达式选择器)
{
}
更多信息