2010-05-06 14 views

Antwort

12

Beachten Sie, dass ein idiomatischer Ansatz innerhalb F # würde Wahrscheinlich sollte man etwas in der Art von Seq.tryFind verwenden, anstatt die LINQ-Operatoren zu verwenden, obwohl es kein Ersatz ist, da es zurückkehrt ein Optionswert

+1

ich auch 'Seq.tryFind' mit würde empfehlen - in F #, Sie in der Regel versuchen,' null' aviod mit Werte (weil sie gefährlich sind). Die Handhabung von Optionswerten ist einfacher, da Sie auch 'Option.map' und andere Funktionen für die Arbeit mit ihnen verwenden können (obwohl dies wahrscheinlich nicht in F # LINQ to SQL funktioniert) –

+0

Yep,' Seq.tryFind (fun _ -> true) 'funktioniert super. –

3

Alternativ können Sie Ihre eigene FirstOrDefault leicht definieren:

let firstordefault list = 
    match list with 
    | head :: tail -> head 
    | [] -> 0 // some default value 

Beispiel:

let exampleList = [ 1; 2; 3 ] 

mit F # interaktiven,

firstordefault exampleList;; 
val it : int = 1 
7

Da das Seq Modul bereits eine head Funktion vom Typ seq<'a> -> 'a,

module Seq = 
    let tryHead (ls:seq<'a>) : option<'a> = ls |> Seq.tryPick Some 

Verwendung als: Ich würde seq<'a> -> option<'a> eine Funktion tryHead mit Signatur definieren

[1; 2; 3] |> Seq.tryHead 
+2

Seitdem wurde '' tryHead' '(https://github.com/Microsoft/visualfsharp/commit/b10392dc16593bf9286583e2a87217d18fa18b8a) in F # 4.0 hinzugefügt. –

Verwandte Themen