代码之家  ›  专栏  ›  技术社区  ›  Václav Dajbych

F#动态选项

f#
  •  3
  • Václav Dajbych  · 技术社区  · 15 年前

    我需要指定,我的成员属性将返回 dynamic?

    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
    

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Ming-Tang    15 年前

    尝试使此数据类型:

    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