F#和C#里面的NULL 值

首先,NULL对于F#类型来说是不允许的值,这在某种意义上是好的,但是由此也带来了麻烦。

 

第一个需要可能是:忘记所有关于optionNULL的参数,我需要NULL,那是我编程的方式。那么好。你可以使用你允许它为NULL的类型的[<AllowNullLiteral>]特性。

 

真正走进F#的人们同意使用option是一个更好的选择。然而,这种限制使F#很难和C#程序交流。例如,你想从C#里面使用F#库。你真的能够禁止C#用户设置NULL值进入你的完美世界?或者,你应该吗?我想保持我的世界不受影响且让其他的人继续他们的方式,而不是成为一个编码警察和强迫每个人。我将使用一个属性来筛选传入的NULL到一个option值,公开Null值到外面的世界,且同时,保护我里面的世界避免受到NULL的干扰。

 

下面的代码使用Unchecked.default函数。不幸的是,在setter函数里面,match不很好地起作用,所以我只使用if….else

 

typeA() =

    let mutable a:option< A> = None

    member this.Value

       withget() =

           matcha with

            | Some(n)-> n

            | None->Unchecked.defaultof< A >

       andset(v) =

           ifv =Unchecked.defaultof< A >then a <- None

           elsea <-Some(v)

 

用这种方法,我可以从我的代码里避免NULL且仍然给C#用户提供很好C#体验。

 

如果你真的需要在F#代码里面检查NULL值,通常你可以使用box(你的值),那么box(你的值) = null是可以的。

 

如果代码编译不过,请移除一些空格,该博客编辑器不能很好的处理F#代码。:(

 

译文出处: http://apollo13cn.blogspot.com/2012/05/null-value-in-f-and-c.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值