2009-12-08 4 views
0

Existe-t-il une fonction pour vérifier si un objet est une liste?Comment vérifier si la tête est la liste en F #

Je l'ai fait comme ceci:

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

Mais je voudrais vérifier avec un si ou correspondre à la place si elle est possible.

Répondre

2

Si vous connaissez le type d'éléments de la liste que vous pouvez utiliser ce code:

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

Je ne sais pas le type, j'ai la liste , mais je l'ai essayé avec: liste et je fais des coutures au travail: D. Merci – Razvi

4

j'utiliser:

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 
    ... 

Cela permettra d'identifier les listes contenant tout type d'élément (int listes, les listes de chaînes, etc.).

Questions connexes