HTML Helper лямбда-запрос - PullRequest
       4

HTML Helper лямбда-запрос

1 голос
/ 18 января 2012

У меня был запрос относительно того, как оцениваются типы параметров в лямбда-выражении.

Если мы запрашиваем IEnumerable типа Customer и имеем такое утверждение, как Customers.Where (c => c.City == "London"), c имеет тип Customer.

В HTML Helpers, используемых в ASP.NET MVC 3, если у нас есть оператор типа Html.TextBoxFor (c => c.Foo) в строго типизированном представлении, c имеет тип, к которому привязано представление.

Что я не понимаю, так это то, как компилятор и визуальная студия intellisense узнают тип параметров в лямбде.В документации MSDN сказано, что «компилятор может вывести тип на основе лямбда-тела, базового типа делегата и других факторов, как описано в спецификации языка C #».Однако я не понимаю, как лямбда-тело или тип делегата позволяют компилятору определять тип данных параметра.

Cheers,

Ответы [ 2 ]

1 голос
/ 18 января 2012

Если вы посмотрите на тип Html.TextBoxFor и т. Д., Вы найдете параметр 1 не Func<TModel, TProperty> (скомпилированный делегат), но Expression<Func<TModel, TProperty>>, которая фактически является структурой данных, из которой делегат может быть скомпилирован во время выполнения.

Или непосредственно проверен, чтобы увидеть, что он делает.В этом случае убедитесь, что это действительно поле или свойство выражения доступа, а затем прочитайте имя свойства, чтобы позволить HTML ссылаться на имя, прежде чем затем получить делегат для получения значения свойства.


1 В качестве метода расширения первый параметр является типом, к которому он применяется, а второй объявленный параметр является первым параметром при объявлении.

0 голосов
/ 18 января 2012

Описание

Они знают это, потому что метод определяет выражение.

Пример

Этот метод нуждается в выражении, которое приводит к свойству типа double

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

}

Дополнительная информация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...