我正在使用一个库(WPF扩展工具包),几乎每个属性都是Nullable<'T>.这使得无处不在,无处不在,这令人痛苦
checkbox.IsChecked <- new Nullable<bool>(true)
Run Code Online (Sandbox Code Playgroud)
在C#中,这将隐式转换.有没有办法模仿F#中的相同行为?我发现最简洁的选择是
checkbox.IsChecked <- unbox true
Run Code Online (Sandbox Code Playgroud)
但这似乎在紧密循环中产生了更多的开销(微优化,但仍然如此),甚至它仍然不如C#简洁.
该new关键字是可选的,类型推断会照顾一般的说法:
open System
checkbox.IsChecked <- Nullable true
Run Code Online (Sandbox Code Playgroud)
如果你不想每次都输入十次额外的击键,你可以像CarstenKönig所描述的那样声明一个函数,但声明不需要像他那样冗长:
let nl x = Nullable x
checkbox.IsChecked <- nl true
Run Code Online (Sandbox Code Playgroud)
看看这个问题:F#中的Nullablle <>和"null" - 你可以用同样的方式包装任何值:
let nl (x : 'a) =
System.Nullable<'a> (x)
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
checkbox.IsChecked <- nl true;
Run Code Online (Sandbox Code Playgroud)