如果列表为空,如何修复List.head中的异常地狱

时间:2015-02-17 19:39:33

标签: f# f#-interactive f#-3.0

我需要将列表的头部传递给List.fold。如果ArgumentException为空,则对于以下情况处理departments的功能解决方案是什么。

let result = employees 
|> List.fold (...) (List.head departments)

这里,部门是一个列表。为了清楚起见,我没有在这里指定折叠功能。

编写匹配模式会使我的代码变得尴尬。

2 个答案:

答案 0 :(得分:3)

您需要检查departments列表并提供默认值(如果它为空)。你可以为它提供一个辅助函数:

let headOrDefault def d =
    match d with
    | [] -> def
    | _ -> List.head d

你可以这样使用:

let result = 
    employees 
    |> List.fold (...) (headOrDefault defDep departments)

答案 1 :(得分:1)

如果departments无效,您可以使用Fsharpx.Collections提供的NonEmptyList<'T>

let result = employees 
|> List.fold (...) (NonEmptyList.head departments)

您不需要处理ArgumentException,因为NonEmptyList.head永远不会失败。