它是 C# 和 F# 之间的互操作
在 F# 中,
type test =
{
value: int
}
type Wrapper (value: test) =
member val Value = value with get, set
let trythis = new Wrapper(null) // error as expected
然而,在 C#
var trythis = new Wrapper(null); //this runs fine
它是 C# 和 F# 之间的互操作
在 F# 中,
type test =
{
value: int
}
type Wrapper (value: test) =
member val Value = value with get, set
let trythis = new Wrapper(null) // error as expected
然而,在 C#
var trythis = new Wrapper(null); //this runs fine
类型的不可为空约束是 F# 特有的功能,因此它在 .NET 中没有任何表示(因此 C# 不尊重它)。
事实上,即使在 F# 中使用不安全的Unchecked.defaultof<_>值,您也可以解决此问题:
let trythis = new Wrapper(Unchecked.defaultof<_>)
如果要检查null暴露给 C# 的对象,这非常有用:
type Wrapper (value: test) =
if value = Unchecked.defaultof<_> then
invalidArg "value" "Value should not be null."
member val Value = value with get, set