ExpressionHelper.GetExpressionText(LambdaExpression)替代

Vol*_*kyy 7 .net c# asp.net-mvc

有.NET Framework替代ExpressionHelper.GetExpressionText(LambdaExpression)吗?我在一些无法引用System.Web.Mvc的项目中需要它.

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

svi*_*ick 8

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

string GetPropertyName(LambdaExpression expression)
{
    var body = (MemberExpression)expression.Body;
    return body.Member.Name;
}
Run Code Online (Sandbox Code Playgroud)

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

如果你想直接调用这个方法GetPropertyName(x => x.ID),你需要知道什么类型x.一种方法是类型参数:

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

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

GetPropertyName<Foo>(f => f.Id)
Run Code Online (Sandbox Code Playgroud)

  • @svick你的方法并不关心像x => x.PropertyX.PropertyY这样复杂的属性,但是ExpressionHelper.GetExpressionText呢! (5认同)