600 Stimmen

Abrufen von Eigenschaftsnamen aus Lambda-Ausdruck

Gibt es einen besseren Weg, um den Namen der Eigenschaft zu erhalten, wenn in über einen Lambda-Ausdruck übergeben? Hier ist, was ich derzeit haben.

z. B.

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

Es funktionierte durch Casting es als ein Memberexpression nur, wenn die Eigenschaft eine Zeichenfolge war. weil nicht alle Eigenschaften Zeichenfolgen sind, musste ich Objekt verwenden, aber dann würde es eine unaryexpression für diejenigen zurückgeben.

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;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X