我有一个使用管道运算符的表达式,它将值转换为字符串然后转换为bool,但有时原始值可以为null。 当值为null时,如何使用模式匹配或其他假设为假?
type kv = Dictionary<string, obj>
let allDayEvent (d: kv) = d.["fAllDayEvent"] |> string |> bool.Parse
答案 0 :(得分:3)
有很多地方可以通过模式匹配来保护:字典查找,转换,解析。以下是所有这些的示例:
let allDayEvent (d: kv) =
match d.TryGetValue "fAllDayEvent" with
| true, v ->
match v with
| null -> printfn "null found"
| :? string as s ->
match bool.TryParse s with
| true, b -> printfn "found a bool: %A" b
| _ -> printfn "That's not a bool?"
| v -> printfn "Found something of type %s" (v.GetType().Name)
| _ -> printfn "No such key"
另见相关问题,for example this。
答案 1 :(得分:1)
不确定为什么要使用词典,但我可能会选择Map。或者至少在某处完成了一些转换为Map。然后我会可能抛出一些“自动”处理空值。
然后Pandoras Box有点开放,但是......
sap.ui.core.Item
请注意,上面的allDayEvent现在是一个选项,可能实际上是您需要/想要的。
它确实保留了所有数据。像真或假是不一样的“没找到东西”或“无法将东西转换为某些bool”。现在它实际上是以下之一:
代码未经过测试,可能需要进一步按摩。