Динамическая опция F # - PullRequest
3 голосов
/ 23 октября 2010

Мне нужно указать, что мое свойство члена будет возвращать что-то вроде dynamic? в C #. Возможно ли использовать динамический тип данных в 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

Этот код не может быть скомпилирован, поскольку тип возвращаемого значения определяется как string option в текстовом регистре. Ключевое слово dynamic неизвестно в F #. Есть идеи?

1 Ответ

2 голосов
/ 24 октября 2010

Попробуйте создать этот тип данных:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...