Scala Option是否与C#Nullable类型相同?

Guy*_*Guy 6 c# scala

在Scala中,您Option[Int]将拥有Some(number)None拥有在第一种情况下和在另一种情况下isDefined返回的属性.truefalse

在C#中你int?将拥有a numbernull拥有在第一种情况下和在另一种情况下HasValue返回的属性.truefalse

Scala Option与C#是一样的Nullable type,有什么区别吗?

Ale*_*nov 5

不,它完全不一样.除了其他答案:

  1. 斯卡拉有Option[Option[Int]]; C#没有int??.

  2. 斯卡拉有Option[String]; C#没有string?.

  3. 在C#中,有一个隐含的转换TT?; 在Scala中,没有隐式转换TOption[T](Scala允许您手动定义此类转换,但不建议这样做).

这意味着Option更加均匀可组合,?并且可以更广泛地使用它.例如斯卡拉的Map[K, V].get(K)回归Option[V]; 但在.Net中,Dictionary<TKey, TValue>[TKey]无法返回TValue?,因为TValue可以是引用类型.即使是等价的,Option.map也需要为返回值类型和引用类型的函数分别实现.

我还要重申,get应该避免!然而,isDefined当没有跟着时,get完全没问题.