Ответ 1
Прежде чем ответить на ваши 2 балла, я думаю, вам нужно понять, что на самом деле есть лямбда-выражения.
В .Net, выражения Lambda, используемые таким образом, являются так называемыми деревьями выражений. Из MSDN:
Деревья выражений представляют код в древовидной структуре данных, где каждый node является выражением, например вызовом метода или двоичной операцией, такой как x < у.
Это, по сути, структуры данных, которые описывают то, что передается, а не значения передаваемых данных. Это означает, что при вызове Html.DisplayFor(x => model.Name)
он передает структуру данных, в которой говорится: "Я звоню этот метод для свойства Name структуры данных xxxx (где xxxx - тип структуры данных, представляющий вашу модель просмотра).
Затем DisplayFor
просматривает эти данные и видит, что имя свойства Name
хорошо Name, оно рассматривает все атрибуты для свойства, чтобы узнать, есть ли у вас аннотации данных, прикрепленные к нему, а затем просматривает значение, определяющее, как отображать отображение для значения. Это немного сложно, пока вы не обернете свою голову, но как только вы посмотрите на страницу MSDN и подумаете об этом, у вас будет ага! момент, как я, и это будет просто внезапно иметь смысл:)
Что касается вашего вопроса № 1, то преимущество использования лямбда-выражений заключается в том, что вы получаете проверку времени выполнения своих свойств. Например, если вы переименовали ViewModel.Name
в ViewModel.ClientName
, все ваши Html.DisplayFor(x => model.Name)
не будут компилироваться, поэтому вы должны их изменить. Если вы не используете лямбда-выражения, все ваши вызовы Html.Display()
будут работать, но вы получите скрытые ошибки с привязкой к модели, которые не будут сразу очевидны из-за неправильного.
Чтобы ответить на # 2, причина такая же, как и мое описание деревьев выражений. Без использования lambdas вы просто передаете значение Model.Name
без информации о самом свойстве, поэтому он не знает, что имя свойства Model.Name
равно Name
, все, что он видит, является строковым значением.
Еще одна хорошая запись деревьев выражений можно найти здесь. Понимание деревьев выражений открывает большую мощность в .Net:)