2017-11-26 2 views
2

Ich bin neu in F # und reactiveui, kann mir jemand helfen, die folgende C# -Code zu F #Wie verwendet man WhenAnyValue und ToProperty mit F #?

this.WhenAnyValue(e => e.Username, p => p.Password, 
    (emailAddress, password) => (!string.IsNullOrEmpty(emailAddress)) && !string.IsNullOrEmpty(password) && password.Length > 6) 
    .ToProperty(this, v => v.IsValid, out _isValid); 

Hier ist, was ich versuchte, zu übersetzen, auch ich weiß nicht, ob dies

der richtige Weg ist
this.WhenAnyValue(toLinq <@ fun (vm:LoginViewModel) -> vm.Username @>, toLinq <@ fun (vm:LoginViewModel) -> vm.Password @>) 
    .Where(fun (u, p) -> (not String.IsNullOrEmpty(u)) && (not String.IsNullOrEmpty(p)) && p.Length > 6) 
    .Select(fun _ -> true) 
    .ToProperty(this, (fun vm -> vm.IsValid), &_isValid) |> ignore 

und ich bin immer diese Fehlermeldung:

Fehler: Aufeinander folgende Argumente durch Leerzeichen oder fach vervielfachten getrennt werden sollen, und Argumente Funktion oder Methode Anwendungen, bei denen sollten

klammerten werden
+0

Welche Zeile gibt den Fehler an? Können Sie es in separate Anweisungen aufteilen, um es einzugrenzen? – Foole

+1

Nun, es ist nicht der gleiche Code –

Antwort

0

Dies geschieht, weil dies:

not String.IsNullOrEmpty(u) 

Runde Klammern, wie sie in C# nicht tun, eine besondere Bedeutung in F # tragen. In F # sind sie nur Klammern, keine spezielle Syntax für Aufrufmethoden. Mit anderen Worten, ist der obige Ausdruck zu diesem äquivalent:

not String.IsNullOrEmpty u 

ich denke, es sollte klar sein, was das Problem ist jetzt: das so aussieht, als ob Sie die not Funktion mit zwei Argumenten anrufen, während das, was Sie dies zu tun, eigentlich gemeint war:

not (String.IsNullOrEmpty u) 

Oder diese:

not <| String.IsNullOrEmpty u 

Oder alternativeIy Sie eine spezielle Funktion für das schaffen könnte:

let notEmpty = not << String.IsNullOrEmpty 

// And then: 
notEmpty u 
+0

Großartig! Danke vielmals –

Verwandte Themen