在 Scala 中你有 Option[Int]
它将是 Some(number)
或 None
并且有一个属性 isDefined
在第一种情况下返回 true
,在另一种情况下返回 false
。
在 C# 中,您有 int?
,它将是 一个数字
或 null
,并且有一个属性 HasValue
,它在第一种情况下返回 true
,在另一种情况下返回 false
。
Scala 的 Option
是否与 C# 的 Nullable type
相同,有什么区别吗?
最佳答案
不,完全不一样。除了其他答案:
Scala 有
Option[Option[Int]]
; C# 没有int??
.Scala 有
Option[String]
; C# 没有string?
.在 C# 中,存在从
T
的隐式转换至T?
;在 Scala 中,没有从T
的隐式转换至Option[T]
(Scala 允许您手动定义此类转换,但不推荐这样做)。
这意味着 Option
比 ?
更统一和可组合并允许它被更广泛地使用。例如。 Scala 的 Map[K, V].get(K)
返回 Option[V]
;但在 .Net 中, Dictionary<TKey, TValue>[TKey]
无法返回 TValue?
,因为 TValue
可以是引用类型。甚至相当于 Option.map
需要为返回值类型和引用类型的函数分别实现。
我还想重申 get
应该避免! isDefined
当后面没有 get
时不过,完全没问题。
关于c# - Scala Option 是否与 C# Nullable 类型相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252315/