我是F#和activeui的新手,有人可以帮助我将以下C#代码翻译成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);
这是我尝试过的,即使我不知道这是否正确
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
我收到了这个错误:
错误:连续参数应该用空格或元组分隔,涉及函数或方法应用程序的参数应该用括号括起来
答案 0 :(得分:0)
这是因为:
not String.IsNullOrEmpty u
圆括号在F#中没有特殊含义,就像它们在C#中一样。在F#中,它们只是括号,而不是调用方法的特殊语法。换句话说,上面的表达式相当于:
not
我认为现在问题应该是显而易见的:这看起来好像你用两个参数调用not (String.IsNullOrEmpty u)
函数,而你实际上要做的是:
not <| String.IsNullOrEmpty u
或者这个:
let notEmpty = not << String.IsNullOrEmpty
// And then:
notEmpty u
或者,替代方案,您可以为此创建一个特殊功能:
hasManyThrough