모든 인스턴스의 속성 이름과 해당 값의 목록이 포함 된 클래스의 문자열을 작성하려고합니다. 이러한 방식으로람다 식을 통해 전달 된 중첩 된 속성의 값 가져 오기
Private Function GetPropertyValuePair(Of T)(lambda As Expression(Of Func(Of T, Object))) As String
Dim body As Expression = lambda
'ensure we have the right type of thing
If TypeOf body Is LambdaExpression Then body = DirectCast(body, LambdaExpression).Body
If TypeOf body Is UnaryExpression Then body = DirectCast(body, UnaryExpression).Operand
If body.NodeType <> ExpressionType.MemberAccess Then Throw New InvalidOperationException()
'get property info
Dim memberInfo = DirectCast(body, MemberExpression).Member
Dim propInfo = DirectCast(memberInfo, PropertyInfo)
Return propInfo.Name + " - " + propInfo.GetValue(Me, Nothing)
End Function
, 나는를 복용하여 현재 값을 받고 있어요 : 질문 Get Property Info from an object without giving the property name as string 당
, 나는 이런 유형T, Object
의 유형
Func
의
Expression
사용하여 속성 이름을 얻고있다
PropertyInfo
및
GetValue
을 사용하여 해당 속성에 대한 현재 인스턴스를 검색합니다.
그럼 이런 식으로 호출 할 수 있습니다 :
GetPropertyValuePair(Of Foo)(Function(x) x.Bar)
생산됩니다 어떤 :
Bar - WhateverTheValueIsForBar
를 내가있을 때 문제이되는 속성이 중첩, GetValue
가 발생합니다 때 예외 :
개체가 대상 유형과 일치하지 않습니다.
예를 들어, 다음 식을 실행에 :
GetPropertyValuePair(Of Foo)(Function(x) x.Bar.Car)
속성 정보는 Foo
에서 직접 찾을 수없는 유형 Car
의 될 것입니다.
처음에 GetValue로 검색 할 필요없이 원본 람다 식에서 인스턴스 값을 얻을 수 있습니까?
이것은 MVC @Html.EditorFor
도우미 가능합니다, 그래서의 가치를 제공하기위한 몇 가지 메커니즘이 있어야 이런 일에 대한 기능을 건네 :
@Html.EditorFor(Function(model) model.Bar.Car)
어떤 아이디어?