我在F#中定义了一个自定义运算符,如下所示:
static member (&?) value defaultValue =
if value = null then
defaultValue
else
value
运算符在类型中定义,应该被调用
在以下场景中:
我正在使用WMI检索有关系统处理器的信息
现在我想得到VoltageCaps属性,但由于那可能是null,我想在这种情况下分配一个默认值。
let voltage = (m.["VoltageCaps"] &? (0 :> obj))
Visual Studio告诉我“类型'obj'不支持运算符'&?'”
我在这里遗漏了什么或操作员本身是否有问题?
答案 0 :(得分:4)
您的运算符采用obj
类型的arg,因此您应将其定义为独立函数,而不是类型成员。
let (&?) (value:obj) (defaultValue:'a) =
match value with
| null -> defaultValue
| _ -> unbox value
现在你可以这样做:
let voltage = m.["VoltageCaps"] &? 0
我将其更改为模式匹配null
,因为它比通用等式具有更好的性能。