Каждому случаю объединения в дискриминированном типе объединения присваивается номер тега
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 для сериализации размеченного объединения, создав модель настраиваемого типа и добавив успех и неудачу в качестве подтипов результата. Но для того, чтобы это работало, необходимо указать для каждого класса, который должен оставаться постоянным. Я надеялся автоматизировать настройку, но мне нужно было иметь возможность иметь число, относящееся к каждому типу, и чтобы эта связь никогда не менялась. Тег кажется идеальным, если его можно жестко запрограммировать в определении размеченного объединения.