我已经使用自定义 F# 类型设计了我的应用程序域,但是现在当我想将数据实际用于各种任务时,这些自定义类型似乎将成为 PITA...即将值写入 CSV 文件,使用其他库依赖原语等。
例如,我有一个这样的自定义类型(用作其他较大类型的构建块):
type CT32 = CT32 of float
但是这样的代码不起作用:
let x = CT32(1.2)
let y = float x //error: The type "CT32" does not support a conversion...
let z = x.ToString() //writes out the namespace, not the value (1.2)
我尝试使用 box/unbox 和 Convert.ToString() 以及两个 F# 转换运算符,但它们似乎都不允许我访问我的类型包含的基本原始值。有没有一种简单的方法来获取自定义类型中的原始值,因为到目前为止,它们比实际有用更令人头疼。
最佳答案
添加对 float
的支持很简单:
type CT32 = CT32 of float with
static member op_Explicit x =
match x with CT32 f -> f
let x = CT32(1.2)
let y = float x
关于types - F# 强制转换/将自定义类型转换为原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602535/