如何从f#返回一个空元组到c#?



我有这个类型正确的c#函数:

static System.Tuple<int,int> f(int n) { 
  switch (n) { 
    case 0: return null;
    default: return System.Tuple.Create(n,n+1);
  }
}
我尝试在f#中重新实现它:
let f = function 
| 0 -> null 
| n -> System.Tuple.Create(n, n+1)

Type-checker不同意:

error FS0001: The type '('a * 'b)' does not have 'null' as a proper value.

如何在f#中重新实现原始c#函数f ?

请注意,虽然这看起来像"如何在f#中返回null"(答案:不要,使用Option),但我们问的是稍微不同的"如何从f# 为c#消费者返回null"(不能使用Option,下面有帮助的答案)。

如果你需要它与c#交互,你可以像这样使用Unchecked.Defaultof:

let f = function
    | 0 -> Unchecked.Defaultof<_>
    | n -> (n, n + 1)

然而,在f#中强烈不鼓励使用空值,如果互操作性不是您主要关心的问题,使用一个选项要自然得多:

let f = function
    | 0 -> None
    | n -> Some (n, n + 1)

相关内容

  • 没有找到相关文章

最新更新