Compilateur C# erreur: Impossible de convertir l'expression lambda

Je suis en train d'utiliser une Lambda expression et de réflexion pour obtenir un membre de noms hiérarchique (plutôt que d'utiliser un texte constant), à appliquer des erreurs de compilation si mon contrôle de liaison de l'information n'est pas valide.

C'est dans un ASP.NET projet MVC, mais ce n'est pas un MVC-question spécifique autant que je sache. EDIT: plus Précisément, je veux la suite pour évaluer la valeur true:

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

Au lieu de cela, je reçois un message d'erreur de compilation:

Erreur 4: Ne peut pas convertir expression lambda de type
'Système.Linq.Les Expressions.LambdaExpression " parce qu'il n'est pas un type délégué.

Pourquoi le paramètre de travailler dans le deuxième cas ci-dessous, mais pas la première?

//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);

Voici le code à partir de la ASP.NET MVC projet Codeplex. Il me semble qu'il passe le même paramètre grâce à la même méthode:

//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...
Vous avez oublié d'inclure la partie la plus pertinente de votre problème — GetExpressionText code source 🙂
Jamais l'esprit, c'est un MVC helper. Voir ma réponse.
est-ce réellement pertinent? basé sur Eric Lippert réponse (le contenu de sa réponse, et non pas simplement le fait qu'il était capable de répondre) la source derrière le GetExpressionText n'est pas pertinent, non?
Vous souvenez-vous de ce que vous fini? Où était ce délégué Eric était en train de parler?
Voir la réponse ci-dessous pour un exemple de code, Lum.

OriginalL'auteur shannon | 2011-03-15