如何检查头部是否在F#中列出

时间:2009-12-08 14:49:38

标签: list f#

是否有检查对象是否为列表的函数?

我是这样做的:

try
    let x = unbox<list<obj>>(l)
    ....
with
   | _ -> ...

但我想用if或match来检查它是否可能。

2 个答案:

答案 0 :(得分:4)

我会用:

let isList o =
  let ty = o.GetType()
  if (ty = typeof<obj>) then false
  else 
    let baseT = ty.BaseType
    baseT.IsGenericType && baseT.GetGenericTypeDefinition() = typedefof<_ list>

if (isList o) then
  ...

这将识别包含任何类型项目的列表(int列表,字符串列表等)。

答案 1 :(得分:2)

如果你知道列表元素的类型,你可以使用这样的代码:

let is_list (x: obj) =
  match x with
  | :? list<int> -> printfn "int list"
  | :? list<string> -> printfn "string list"
  | _ -> printfn "unknown object"