在null / empty值上使用bool.Parse时出错

时间:2017-01-10 13:42:59

标签: f#

我有一个使用管道运算符的表达式,它将值转换为字符串然后转换为bool,但有时原始值可以为null。 当值为null时,如何使用模式匹配或其他假设为假?

type kv = Dictionary<string, obj>
let allDayEvent (d: kv) = d.["fAllDayEvent"] |> string |> bool.Parse

2 个答案:

答案 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”。现在它实际上是以下之一:

    找到了
  1. 的密钥和一些像“true”的字符串:一些(true)
  2. 找到了
  3. 键和一些像“false”的字符串:一些(假)
  4. 未找到密钥或字符串无法转换为bool:无
  5. 代码未经过测试,可能需要进一步按摩。