我需要指明,我的成员属性将在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#中未知。有什么想法吗?
答案 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