В приведенном ниже коде F # мне интересно, как получить тип, связанный с каждым случаем объединения, через отражение
type AccountCreatedArgs = {
Owner: string
AccountId: Guid
CreatedAt: DateTimeOffset
StartingBalance: decimal
}
type Transaction = {
To: Guid
From: Guid
Description: string
Time: DateTimeOffset
Amount: decimal
}
type AccountEvents =
| AccountCreated of AccountCreatedArgs
| AccountCredited of Transaction
| AccountDebited of Transaction
Я пробовал использовать FSharpType.GetUnionCases(typeof<AccountEvents>)
, но UnionCaseInfo
не предоставляет никакой информации о типе дела (только декларирующий тип, известный как AccountEvents
, поэтому в моем случае не очень полезен) = /
Ответ glennsl действительно помог мне https://stackoverflow.com/a/56351231/4636721
Что мне действительно пригодилось в моем случае, так это:
let getUnionCasesTypes<'T> =
Reflection.FSharpType.GetUnionCases(typeof<'T>)
|> Seq.map (fun x -> x.GetFields().[0].DeclaringType)