从lambda表达式中检索属性名

从lambda表达式中检索属性名

当通过lambda表达式传入时,是否有更好的方法获取属性名称?这是我目前所拥有的。

例如。

GetSortingInfo<User>(u => u.UserId);

它的工作方式是,只有当属性是字符串时,才将其转换为成员表达式。因为不是所有的属性都是字符串,所以我不得不使用Object,但是它会返回这些字符串的一个unary表达式。

public static RouteValueDictionary GetInfo<T>(this HtmlHelper html, 
    Expression<Func<T, object>> action) where T : class{
    var expression = GetMemberInfo(action);
    string name = expression.Member.Name;

    return GetInfo(html, name);}private static MemberExpression GetMemberInfo(Expression method){
    LambdaExpression lambda = method as LambdaExpression;
    if (lambda == null)
        throw new ArgumentNullException("method");

    MemberExpression memberExpr = null;

    if (lambda.Body.NodeType == ExpressionType.Convert)
    {
        memberExpr = 
            ((UnaryExpression)lambda.Body).Operand as MemberExpression;
    }
    else if (lambda.Body.NodeType == ExpressionType.MemberAccess)
    {
        memberExpr = lambda.Body as MemberExpression;
    }

    if (memberExpr == null)
        throw new ArgumentException("method");

    return memberExpr;}


青春有我
浏览 835回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP