可区分联合类型中的每个联合案例都有一个标签号
type Result<'TSuccess,'TFailure> =
| Success of 'TSuccess
| Failure of 'TFailure
let cases = FSharpType.GetUnionCases typedefof<Result<_,_>>
for case in cases do
case.Tag
通过查看已编译的代码,它是由编译器和常量生成的,具体取决于案例的顺序。所以成功为0,失败为1。
- 标签号总是根据订单生成吗?这是在 F# 规范中吗?
- 是否可以提供自定义标签号,以便如果订单更改或我在中间放置另一个案例,在成功和失败之间,它们的标签号不会改变?
我正在尝试通过创建自定义类型模型并将成功和失败添加为结果的子类型来设置 protobuf-net 以序列化有区别的联合。但要使其工作,需要为每个类指定,它必须保持不变。我希望自动化设置,但需要能够有一个与每种类型相关的数字,并且这种关系永远不会改变。标记似乎是完美的,如果它可以在有区别的联合定义中进行硬编码。