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

标签 c# f# null tuples

我有这个类型正确的 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)

但是类型检查器不同意:

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

如何重新实现原来的C#函数f在 F# 中?

请注意,虽然这看起来像问题“如何在 F# 中返回 null”(答案:不要,使用 Option),但我们要问的问题略有不同“我们如何从 F# 返回 null”对于 C# 使用者”(无法使用选项,下面有帮助的答案)。

最佳答案

如果您需要它与 C# 互操作,您可以使用 Unchecked.Defaultof,如下所示:

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

但是,在 F# 中强烈建议不要使用 null 值,如果互操作性不是您主要关心的问题,那么使用选项更为自然:

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

关于c# - 如何从 f# 返回一个空元组到 c#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65748577/

相关文章:

c# - 将应用程序安全组添加到 Azure VM

c# - Rijandeal 和特殊字符

.net - 请学习F#的一些好资源

.net - F# 是否具有行多态性(或类似的东西?)

r - 何时使用缺失值与 NULL 值在 R 中传递未定义的函数参数,为什么?

javascript - Chrome Native Messaging API chrome.runtime.connectNative 不是函数

c# - 在富文本框中的光标位置插入图像

sorting - F# - 对包含元组的矩阵进行排序

c# - 空合并运算符赋值给自己

c# - 检查对象是否为空