ExpressionHelper.GetExpressionText(LambdaExpression)替代

时间:2011-11-10 12:03:36

标签: c# .net asp.net-mvc

是否有.NET Framework替代ExpressionHelper.GetExpressionText(LambdaExpression)? 我在一些无法引用System.Web.Mvc。

的项目中需要它

我理解其中一种可能性就是编写自己的GetExpressionText(LambdaExpression)方法实现,但我不想这样做。我的目标是重用已有的.NET Framework代码。

1 个答案:

答案 0 :(得分:8)

自己实现该方法非常简单:

string GetPropertyName(LambdaExpression expression)
{
    var body = (MemberExpression)expression.Body;
    return body.Member.Name;
}

如果传入的lambda不是MemberExpression,它将抛出异常(尽管您可能需要更具描述性的异常)。

如果您想直接调用此方法,例如GetPropertyName(x => x.ID),则需要知道x的类型。一种方法是类型参数:

string GetPropertyName<T>(Expression<Func<T, object>> expression)
{
    var body = (MemberExpression)expression.Body;
    return body.Member.Name;
}

但这意味着您必须明确指定它:

GetPropertyName<Foo>(f => f.Id)