它是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
答案 0 :(得分:8)
对类型的非可空约束是F#特定的特性,因此它在.NET中没有任何表示(因此C#不尊重它)。
事实上,您甚至可以使用不安全的Unchecked.defaultof<_>
值在F#中解决此问题:
let trythis = new Wrapper(Unchecked.defaultof<_>)
如果要检查暴露于C#的对象中的null
,这非常有用:
type Wrapper (value: test) =
if value = Unchecked.defaultof<_> then
invalidArg "value" "Value should not be null."
member val Value = value with get, set