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

标签 c# scala

在 Scala 中你有 Option[Int] 它将是 Some(number)None 并且有一个属性 isDefined 在第一种情况下返回 true,在另一种情况下返回 false

在 C# 中,您有 int?,它将是 一个数字null,并且有一个属性 HasValue,它在第一种情况下返回 true,在另一种情况下返回 false

Scala 的 Option 是否与 C# 的 Nullable type 相同,有什么区别吗?

最佳答案

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

  1. Scala 有 Option[Option[Int]] ; C# 没有 int?? .

  2. Scala 有 Option[String] ; C# 没有 string? .

  3. 在 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/

相关文章:

scala - 我应该如何避免无意中捕获函数文字中的局部作用域?

c# - DateTime.TryParse() 在具有显式区域性的不同计算机上返回不同的结果

c# - 在 Web api 和身份 C# 中获取无效的 token 重置密码时间?

c# - 如何知道哪个方法启动了工作线程

java - 如何优化 Scala 中的 for-comprehensions 和循环?

scala - 当其类型参数出现在不变位置时,如何使特征逆变?

C# MDI - 如何防止滚动条?

c# - WebApi 在本地工作,但在发布时失败

function - Scala 风格 : how far to nest functions?

Scala:将字符串拆分为两个整数