它是 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<_>
来解决这个问题。值(value):
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