F#动态选项

时间:2010-10-23 19:53:32

标签: f#

我需要指明,我的成员属性将在C#中返回dynamic?之类的内容。可以在F#中使用动态数据类型吗?

type Data =
    | Text of string
    | Number of string
    | Date of string
    with

    member x.Value
        with get() : dynamic option = 
            match x with
            | Text(value) ->
                if value.Length > 0 then Some(value) else None
            | Number(value) ->
                let (success, number) = Decimal.TryParse value
                if (success) then Some(number) else None
            | Date(value) ->
                let (success, date) = DateTime.TryParse value
                if (success) then Some(date) else None

此代码无法编译,因为返回类型在Text case中被确定为string option。关键字dynamic在F#中未知。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

尝试制作此数据类型:

type ThreeWay = S of string | N of Decimal | D of DateTime

或使用System.Object类型:

open System
type Data =
    | Text of string
    | Number of string
    | Date of string
    with

    member x.Value
        with get() : Object option = 
            match x with
            | Text(value) ->
                if value.Length > 0 then Some(value :> Object) else None
            | Number(value) ->
                let (success, number) = Decimal.TryParse value
                if (success) then Some(number :> Object) else None
            | Date(value) ->
                let (success, date) = DateTime.TryParse value
                if (success) then Some(date :> Object) else None

获取值:

let d = Number("123")
let v = d.Value
match v with
| Some(x) -> x :?> Decimal // <-- TYPE CAST HERE