Wie erhält man den Typ einer Eigenschaft, die in einem generischen Ausdruck verwendet wird?

c# expression expression-trees generics

Frage

public static void Map<T>(Expression<Func<T, object >> expression)
{
    var memberExpression = (expression.Body as UnaryExpression).Operand as MemberExpression;
    var name = memberExpression.Member.Name;
}

Verwendung:

Map<Article>(x => x.Name)

Der Name ist vom Typ string.

Wie bekomme ich den Typ?

Akzeptierte Antwort

var returnType = memberExpression.Member is MethodInfo 
    ? ((MethodInfo)memberExpression.Member).ReturnType 
    : ((PropertyInfo)memberExpression.Member).PropertyType;

Ich nehme an, Sie wollen den Rückgabetyp. Wenn Sie den Typ definieren möchten, für den die Methode definiert ist, verwenden Sie memberExpression.Member.DeclaringType .


Beliebte Antwort

Hier ist eine einfache Ausdruckserweiterungsmethode, die für andere nützlich sein kann.

 public static Type GetPropertyType<TModel, TValue>(this Expression<Func<TModel, TValue>> expression)
    {
        var body = expression.Body as MemberExpression;
        if (body == null)
        {
            throw new ArgumentException("'expression' should be a member expression");
        }
        return ((PropertyInfo)body.Member).PropertyType;
    }

Beispielverwendung:

if (expression.GetPropertyType() == typeof(DateTime))


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum