如何在 F# 中使用 WhenAnyValue 和 ToProperty?
How to use WhenAnyValue and ToProperty with F#?
我是 F# 和 reactiveui 的新手,有人可以帮我将以下 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
我收到了这个错误:
错误:连续的参数应该用空格或元组分隔,涉及函数或方法应用的参数应该用括号括起来
发生这种情况是因为:
not String.IsNullOrEmpty(u)
括号在 F# 中不像在 C# 中那样具有特殊含义。在 F# 中,它们只是括号,而不是调用方法的特殊语法。换句话说,上面的表达式等同于:
not String.IsNullOrEmpty u
我认为现在的问题应该很明显了:这看起来好像您是在用两个参数调用 not
函数,而您实际上是想这样做:
not (String.IsNullOrEmpty u)
或者这个:
not <| String.IsNullOrEmpty u
或者,您可以为此创建一个特殊函数:
let notEmpty = not << String.IsNullOrEmpty
// And then:
notEmpty u
我是 F# 和 reactiveui 的新手,有人可以帮我将以下 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
我收到了这个错误:
错误:连续的参数应该用空格或元组分隔,涉及函数或方法应用的参数应该用括号括起来
发生这种情况是因为:
not String.IsNullOrEmpty(u)
括号在 F# 中不像在 C# 中那样具有特殊含义。在 F# 中,它们只是括号,而不是调用方法的特殊语法。换句话说,上面的表达式等同于:
not String.IsNullOrEmpty u
我认为现在的问题应该很明显了:这看起来好像您是在用两个参数调用 not
函数,而您实际上是想这样做:
not (String.IsNullOrEmpty u)
或者这个:
not <| String.IsNullOrEmpty u
或者,您可以为此创建一个特殊函数:
let notEmpty = not << String.IsNullOrEmpty
// And then:
notEmpty u