gpt4 book ai didi

f# - F# 联合成员的 Enum.GetName 等效项是什么?

转载 作者:行者123 更新时间:2023-12-03 12:10:07 29 4
gpt4 key购买 nike

我想得到相当于 Enum.GetName对于 F# 受歧视的工会成员。调用 ToString()给了我 TypeName+MemberName,这不是我想要的。当然,我可以将它子串起来,但是它安全吗?或者也许有更好的方法?

最佳答案

您需要使用 Microsoft.FSharp.Reflection 中的类命名空间所以:

open Microsoft.FSharp.Reflection

///Returns the case name of the object with union type 'ty.
let GetUnionCaseName (x:'a) =
match FSharpValue.GetUnionFields(x, typeof<'a>) with
| case, _ -> case.Name

///Returns the case names of union type 'ty.
let GetUnionCaseNames <'ty> () =
FSharpType.GetUnionCases(typeof<'ty>) |> Array.map (fun info -> info.Name)

// Example
type Beverage =
| Coffee
| Tea

let t = Tea
> val t : Beverage = Tea

GetUnionCaseName(t)
> val it : string = "Tea"

GetUnionCaseNames<Beverage>()
> val it : string array = [|"Coffee"; "Tea"|]

关于f# - F# 联合成员的 Enum.GetName 等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1259039/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com