ExpressionHelper.GetExpressionText(LambdaExpression) alterna

本文关键字:alterna LambdaExpression GetExpressionText ExpressionHelper | 更新日期: 2023-09-27 18:14:19

是否有。net框架替代ExpressionHelper.GetExpressionText(LambdaExpression) ?我需要它在一些项目,不能引用System.Web.Mvc。

我明白其中一种可能性是编写自己的GetExpressionText(LambdaExpression)方法实现,但我不想这样做。我的目标是重用已经存在的。net框架代码。

ExpressionHelper.GetExpressionText(LambdaExpression) alterna

自己实现这个方法很容易:

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)