F#中Nullable的赋值

Dax*_*ohl 3 f#

我正在使用一个库(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#简洁.

pho*_*oog 7

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)


Car*_*ten 5

看看这个问题: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)