방법으로 전달하여 속성의 이름을 얻습니다.
-
08-07-2019 - |
문제
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());
제휴하지 않습니다 StackOverflow