| P.Call(_, mi, [P.Value(value, _); P.PropertyGet(q, propInfo, [])]) -> ...
가 어떻게 propInfo
의 값을 얻기 위해서 (때문에), GetValue
방법을 사용해야합니까? @Stephen Swensen '제안을 바탕으로F 번호 - 반사, 패턴 매칭 : GetValue
편집
, 내가 할 시도했다 :
TargetException이 처리되지 않은이었다 그러나
| P.Call(_, mi, [P.Value(value, _); P.PropertyGet(q, pi, [])]) -> match q.Value with | P.PropertyGet(_, pi2, []) -> printfn "%A" <| pi.GetValue(pi2, null) | _ -> failwith "fail"
, 단순히 예외를 throw : 개체 이 대상 유형과 일치하지 않습니다.
런타임 pi2
의 값 : Some({PropertyGet (None, Author r, [])})
EDIT
Bahh ... pi2
정적 didnt 한 것을 통지.
솔루션이다 : 그것은 (정적 또는 인스턴스)하고 있는지 여부는 어떤 인수를 재산의 종류 따라
| P.Call(_, mi, [P.Value(value, _); P.PropertyGet(q, pi, [])]) ->
match q.Value with
| P.PropertyGet(_, pi2, []) ->
let getObj = pi2.GetValue(null, null)
printfn "%A" <| pi.GetValue(getObj, null)
| _ -> failwith "fail"
이것은 인스턴스 속성입니다. 'propInfo.GetValue (instance, null)'을 실행하면 예외를 throw합니다. TargetException was unhandled : Object가 대상 유형과 일치하지 않습니다. 어떤 제안? - 조금이라도 참고가된다면, 나는 그 목록이 차이를 만들지 확실하지 않은 목록을 전달할 것이다. – ebb
@ebb : 맞습니다. 나 자신보다 앞섰습니다. 인스턴스를 나타내는 'Expr'이 인스턴스 자체의 값이 아니라 인스턴스를 나타내는 것을 알고 난 후에 내 대답을 업데이트했습니다. –
@ebb : "목록"을 전달하는 것에 관해 당신이 의미하는 바가 확실하지 않습니다. –