是否有检查对象是否为列表的函数?
我是这样做的:
try
let x = unbox<list<obj>>(l)
....
with
| _ -> ...
但我想用if或match来检查它是否可能。
答案 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"