У меня есть функция, которая может возвращать разные типы, и для этого я использую различимое объединение .Что мне нужно, так это преобразовать один тип в различном объединении в другой тип.Также некоторые типы могут быть преобразованы во все другие типы ( String ), но некоторые типы могут быть преобразованы только в String ( MyCustomType )
.Я добавил метод-член ConvertTo к ResultType
:
type MyTypes =
| Boolean = 1
| Integer = 2
| Decimal = 3
| Double = 4
| String = 5
| MyCustomType = 6
type ResultType =
| Boolean of bool
| Integer of int
| Decimal of decimal
| Double of double
| String of string
| MyCustomType of MyCustomType
with
member this.ConvertTo(newType: MyTypes) =
match this with
| ResultType.Boolean(value) ->
match newType with
| MyTypes.Boolean ->
this
| MyTypes.Integer ->
ResultType.Integer(if value then 1 else 0)
...
| ResultType.MyCustomType(value) ->
match newType with
| MyTypes.MyCustomType ->
this
| MyTypes.String ->
ResultType.String(value.ToString())
| _ ->
failwithf "Conversion from MyCustomType to %s is not supported" (newType.ToString())
Мне не нравится такая конструкция, потому что, если я добавляю больше типов, это требует от меня много изменений: MyTypes , ResultType , а также в нескольких местах в функции-члене ConvertTo .
Может кто-нибудь предложить лучшее решение для таких типовконвертация?
Заранее спасибо