我有一个C#类返回一个List,使用System.Collections.Generic列表而不是F#List
我想迭代列表以查找对象或找不到它。这是我在C#中的表现。我如何在F#
中完成类似的事情foreach (AperioCaseObj caseObj in CaseList)
{
if (caseObj.CaseId == "")
{
}
else
{
}
}
答案 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