我正在使用一个库(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/