我正在使用一个库(WPF 扩展工具包),其中几乎每个属性都是 Nullable<'T> 。这使得不断地写作变得很痛苦

checkbox.IsChecked <- new Nullable<bool>(true)

在 C# 中,这将隐式转换。有没有办法在 F# 中模仿相同的行为?我发现的最简洁的选择是
checkbox.IsChecked <- unbox true

但这似乎在紧密循环中产生了更多的开销(微优化,但仍然如此),即使它仍然不如 C# 简洁。

最佳答案

一种解决方法是定义前缀运算符:

let inline (!) (x: ^a) = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)

checkbox.IsChecked <- !true

请注意,这会影响取消引用运算符。如果这是一个问题,您可以选择不同的符号。

关于f# - 在 F# 中赋值为 Nullable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25448110/

10-12 12:39
查看更多