我有一个函数,它可以返回不同的类型,为此我使用了有区别的联合。我需要的是从有区别的联合中的一种类型转换为另一种类型。还有一些类型可以转换为所有其他类型(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成员函数的几个地方。
任何人都可以为这种类型转换提出更好的解决方案吗?
提前致谢