문제

stackoverflow 사용자 Jolson은 현을 사용하지 않고 Menthods를 등록 할 수있는 방법을 보여주는 매우 멋진 코드를 가지고 있었지만 표현 나무 여기.

방법 대신 속성에 대해 비슷한 것을 가질 수 있습니까? 속성 (속성 이름이 아님)을 통과시키고 방법 내부에 속성 이름을 얻으려면?

이 같은:


    RegisterMethod(p => p.Name)

    void RegisterMethod(Expression??? propertyExpression) where T : Property ???
    {
        string propName = propertyExpression.Name;
    }

감사.

도움이 되었습니까?

해결책

당신은 이것을 따라 무언가를 쓸 수 있습니다 :

static void RegisterMethod<TSelf, TProp> (Expression<Func<TSelf, TProp>> expression)
{
    var member_expression = expression.Body as MemberExpression;
    if (member_expression == null)
        return;

    var member = member_expression.Member;
    if (member.MemberType != MemberTypes.Property)
        return;

    var property = member as PropertyInfo;
    var name = property.Name;

    // ...
}

다른 팁

나는 이것의 전체 예를 올렸다 여기 (또한 "에 대한 게시물 참조"this"그 아래)

주목하십시오 LambdaExpression 게시 된 코드의 업데이트로서 일부 시나리오에서 더 쉽게 사용할 수 있도록 조금 더 추가 할 수 있습니다.

static class MemberUtil<TType>
{
    public static string MemberName<TResult>(Expression<Func<TType, TResult>> member)
    {
        return MemberUtil.MemberName<TType, TResult>(member);
    }
}

그런 다음 리턴 값에 일반 유형 관계를 사용할 수 있습니다.

string test1 = MemberUtil<Foo>.MemberName(x => x.Bar); 
string test2 = MemberUtil<Foo>.MemberName(x => x.Bloop()); 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top