2017-11-26 13 views
2

私はF#に新たなんだとreactiveuiし、誰かがF#2にWhenAnyValueとToPropertyを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); 

を次のC#コードを変換するために私を助けることができますがここでは、これは正しい方法

ある場合でも、私は知らないが、私が試したものです
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 

そして、私はこのエラーを取得しています:

エラー:歴代の引数は、スペースで区切ったりtupled、および関数やメソッドのアプリケーションを含む引数は

を括弧する必要がありますする必要があります
+0

どのラインでエラーが発生していますか?それを絞り込むために別のステートメントに分割してみることはできますか? – Foole

+1

まあ、それは同じコードではない –

答えて

0

これは、このために起こります:彼らはC#で行うよう

not String.IsNullOrEmpty(u) 

括弧はF#で特別な意味を運びません。 F#では、メソッドを呼び出すための特別な構文ではなく、かっこだけです。言い換えれば、上記の式は、これに相当します

not String.IsNullOrEmpty u 

私はそれは問題では今何を明白であるべきだと思う:あなたは何のに対し、二つの引数を持つnot関数を呼び出しているかのように、これが見えます

not (String.IsNullOrEmpty u) 

またはこの:実際にはこれだったんためのもの

not <| String.IsNullOrEmpty u 

または、alternativeIy、あなたはこのために特別な機能を作成することができます。

let notEmpty = not << String.IsNullOrEmpty 

// And then: 
notEmpty u 
+0

素晴らしい!どうもありがとう –

関連する問題