我有一個函數,它可以返回不同類型,我使用歧視工會爲此。我需要的是將具有歧視性的工會中的一種類型轉換爲另一種類型。 另外一些類型的可以是可轉換到所有其他類型(字符串),但一些類型的只能被轉換成字符串(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成員函數中。
有人可以提出更好的解決方案,這種類型轉換?
在此先感謝
如果添加更多類型,轉換矩陣爲O(N^2),所以當然有很多變化,這本質上是一個大問題。 – Brian 2011-03-15 19:38:57
@布萊恩。我不確定這是否可以在這裏使用,以及如何以正確的方式實現,但可以使用一些中間類型* MyIntermediateClass *進行轉換,並轉換爲其他類型,如:* Double - > MyIntermediateClass - > MyCustomClass * - 在這種情況下它將是O(2 * N)。 – Vitaliy 2011-03-16 08:32:07