2008-11-05 7 views
2

J'ai une classe C# les retourne une liste, en utilisant les listes System.Collections.Generic pas Liste F #System.Collections.Generic Liste et F #

Je veux itérer que la liste pour trouver un objet ou pas le trouver . Voici comment je le ferais en C#. Comment pourrais-je accomplir la même chose en F #

foreach (AperioCaseObj caseObj in CaseList) 
{ 
    if (caseObj.CaseId == "") 
    {  
    } 
    else 
    { 
    } 
} 

Répondre

3

Voir cet exemple pour itérer un entier liste générique:

#light 
open System.Collections.Generic 

let genList = new List<int>() 

genList.Add(1) 
genList.Add(2) 
genList.Add(3) 


for x in genList do 
    printf "%d" x 
+0

Je suis nouveau à F #. Qu'est-ce que #light (première ligne dans votre exemple)? – octopusgrabbus

2

Ce genre de liste est également un IEnumerable de sorte que vous pouvez toujours utiliser la notation de for elt in list do F #:

for caseObj in CaseList do 
    if caseObj.CaseId = "" then 
    ... 
    else 
    ... 
7
match Seq.tryfind ((=) "") caseList with 
     None -> print_string "didn't find it" 
    | Some s -> printfn "found it: %s" s 
0

en utilisant tryfind pour correspondre contre un champ dans un enregistrement:

type foo = { 
    id : int; 
    value : string; 
} 

let foos = [{id=1; value="one"}; {id=2; value="two"}; {id=3; value="three"} ] 

// This will return Some foo 
List.tryfind (fun f -> f.id = 2) foos 

// This will return None 
List.tryfind (fun f -> f.id = 4) foos 
3

Une liste C# est appelée ResizeArray dans F #. Pour trouver un élément dans ResizeArray, vous pouvez utiliser "tryfind" ou "find". TryFind renvoie un type d'option (Option), ce qui signifie que si l'élément est introuvable, vous obtiendrez None. Trouvez d'autre part déclenche une exception si elle ne trouve pas l'élément que vous cherchez


let foo() = 
    match CaseList |> ResizeArray.tryfind (fun x -> x.caseObj = "imlookingforyou") with 
    |None -> print-string ""notfound 
    |Some(case) -> printfn "found %s" case 

ou

let foo() 
    try 
     let case = ResizeArray.find (fun x -> x.caseObj = "imlookingforyou") 
     printfn "found %s" case 

    with 
    | _ -> print_string "not found"