제네릭 표현식 내에서 사용되는 속성 유형을 얻는 방법?

c# expression expression-trees generics

문제

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

용법:

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

이름 은 string 유형입니다.

유형을 얻으려면 어떻게해야합니까?

수락 된 답변

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

나는 당신이 반환 유형을 원한다고 가정합니다. 메서드가 정의 된 형식을 memberExpression.Member.DeclaringType 사용 memberExpression.Member.DeclaringType .


인기 답변

다음은 다른 사람들에게 유용 할 수있는 간단한 표현 확장 메소드입니다.

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

샘플 사용법 :

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow