正在学习F#,找不到答案...我想处理Nullable参数(原始C#中的DateTime?)为null的情况,但出现错误“ Nullable没有null作为适当的值”。正确的方法是什么?
let addIfNotNull(ht:Hashtable, key:string, value:Nullable<DateTime>) =
match value with
| null -> ()
| _ -> ht.Add(key,value)
ht
答案 0 :(得分:5)
可以使用
System.Nullable<'T>
属性从Value
对象获得实际值,并且可以通过调用System.Nullable<'T>
来确定HasValue
对象是否具有值方法。
所以您不用match
if value.HasValue then ht.Add(key, value.Value)
您可以使用
match Option.ofNullable value with ...
或声明一些活动模式以提供帮助。
答案 1 :(得分:1)
虽然@AlexeyRomanov的答案非常有效,但如果您确实想匹配Nullable
值,则可以这样定义一个活动模式:
let (|Null|Value|) (x : _ Nullable) =
if x.HasValue then Value x.Value else Null
然后在您的函数中使用它:
let addIfNotNull (ht : Hashtable) (key : string)
(value : Nullable<DateTime>) =
match value with
| Null -> ()
| Value dt -> ht.Add (key, dt)
ht
我自由更改了函数的签名,因此它采用了可修改的参数;除非您有特定要求,否则通常使用curried参数而不是tupled参数。