它是 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 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!