2010-10-23 4 views
3

Je dois spécifier que la propriété de mon membre renverra quelque chose comme dynamic? en C#. Est-il possible d'utiliser le type de données dynamique en F #?F # option dynamique

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 

Ce code ne peut être calculée, car le type de retour est déterminé comme string option de cas du texte. Le mot clé dynamic est inconnu dans F #. Des idées?

+0

Vous pouvez 'box' mais , très probablement, c'est un défaut de conception. –

Répondre

2

Essayez de faire ce type de données:

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

ou, utilisez le type 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 

Pour obtenir la valeur:

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