System.Collections.Generic列表和F#

时间:2008-11-05 21:36:16

标签: f#

我有一个C#类返回一个List,使用System.Collections.Generic列表而不是F#List

我想迭代列表以查找对象或找不到它。这是我在C#中的表现。我如何在F#

中完成类似的事情
foreach (AperioCaseObj caseObj in CaseList)
{
     if (caseObj.CaseId == "")
     {    
     }
     else
     { 
     }
}

5 个答案:

答案 0 :(得分:7)

match Seq.tryfind ((=) "") caseList with
      None -> print_string "didn't find it"
    | Some s -> printfn "found it: %s" s

答案 1 :(得分:4)

C#列表在F#中称为ResizeArray。要在ResizeArray中查找元素,可以使用“tryfind”或“find”。 TryFind返回一个选项类型(Option),这意味着如果找不到该元素,您将获得None。另一方面,如果查找找不到您要查找的元素

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

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

   with
   | _ -> print_string "not found"

答案 2 :(得分:3)

请参阅此示例以迭代整数通用列表:

#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

答案 3 :(得分:2)

这种列表也是一个IEnumerable,所以你仍然可以使用F#的for elt in list do表示法:

for caseObj in CaseList do
  if caseObj.CaseId = "" then
    ...
  else
    ...

答案 4 :(得分:0)

使用tryfind匹配记录中的字段:

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