UnionCaseInfo
имеет метод GetFields
, который возвращает массив PropertyInfo
с, который описывает каждое поле / аргумент случая объединения. Например:
FSharpType.GetUnionCases(typeof<AccountEvents>)
|> Array.map(fun c -> (c.Name, c.GetFields()))
|> printfn "%A"
напечатает
[|("AccountCreated", [|AccountCreatedArgs Item|]);
("AccountCredited", [|Transaction Item|]);
("AccountDebited", [|Transaction Item|])|]
Имя, назначенное для единственного случая объединения полей, - "Item", а если множественное число - "Item1", "Item2" и т. Д. Сам тип поля можно получить из свойства PropertyType
PropertyInfo
, поэтому:
FSharpType.GetUnionCases(typeof<AccountEvents>)
|> Array.map(fun c -> (c.Name, c.GetFields() |> Array.map(fun p -> p.PropertyType.Name)))
|> printfn "%A"
напечатает таким образом
[|("AccountCreated", [|"AccountCreatedArgs"|]);
("AccountCredited", [|"Transaction"|]);
("AccountDebited", [|"Transaction"|])|]