Ошибка компилятора C #: не удается преобразовать лямбда-выражение

Я пытаюсь использовать лямбда-выражение и отражение, чтобы получить иерархическое имя элемента (вместо использования текстовой константы), чтобы принудительно выполнить ошибки времени компиляции, если моя информация о привязке элемента управления недействительна.

Это находится в проекте ASP.NET MVC, но это не вопрос, связанный с MVC, AFAIK. РЕДАКТИРОВАТЬ: В частности, я хочу, чтобы следующее оценивалось как истинное:

string fullname = GetExpressionText(model => model.Locations.PreferredAreas);
"Locations.PreferredAreas" == fullname;

Вместо этого я получаю ошибку компиляции:

Ошибка 4: невозможно преобразовать лямбда-выражение в тип 'System.Linq.Expressions.LambdaExpression', потому что это не тип делегата.

Почему параметр работает во втором случае ниже, но не в первом?

// This doesn't compile:
string tb1 = System.Web.Mvc.ExpressionHelper.
    GetExpressionText(model => model.Locations.PreferredAreas);

// But this does:
MvcHtmlString tb2 =
    Html.TextBoxFor(model => model.Locations.PreferredAreas);

Вот соответствующий код из ASP.NET MVC Codeplex проект. Мне кажется, что он передает один и тот же параметр в тот же метод:

// MVC extension method
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) {
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    return TextBoxHelper(
        htmlHelper,
        metadata,
        metadata.Model,
        ExpressionHelper.GetExpressionText(expression),
        htmlAttributes);
}

// MVC utility method
public static string GetExpressionText(LambdaExpression expression) {
    // Split apart the expression string for property/field accessors to create its name
    // etc...
5
задан shannon 15 March 2011 в 06:23
поделиться