c# - 为什么 Microsoft F# 指南不建议从 C# 使用的代码中返回元组?

标签 c# f#

根据 F# 指南,不建议将元组作为 F# 的返回类型用于 C# 中使用的代码。

Avoid using tuples as return values .

这两种语言之间的元组似乎具有良好的兼容性。尤其是在新版本中。所以,我不太理解这个建议。我计划返回一个结构,以避免这些准则必须考虑到的任何危害。

他们给出的解释含糊不清。

they will most often not provide the ideal and expected API for .NET developers.

这到底是什么意思?如果我忽略这一点并返回元组,我会遇到什么陷阱?

最佳答案

我认为您问题的直接答案是大多数 C# 和 .NET API 不返回元组。最初,这是因为旧版本的 C# 不支持元组,但现在它已成为一种既定模式,无论好坏。 F# 指南仅遵循 principle of least surprise .

例如,考虑 Dictionary.TryGetValue :

public bool TryGetValue (TKey key, out TValue value);

F# 会自动将其转换为 TKey -> (bool * TValue),但事实是 C# 中不需要元组返回类型。

所以,如果您是 API 的使用者,那么您当然应该按照您现在想要的方式定义它。但如果这是一个由典型 C# 开发人员使用的公共(public) API,我会强烈考虑遵循既定的模式,即使它更丑陋。

也就是说,随着时间的推移,元组返回类型可能(并且可能应该)在 C# 和 .NET 中变得更加常见。如果是这样,我预计 F# 设计指南最终也会更新。

关于c# - 为什么 Microsoft F# 指南不建议从 C# 使用的代码中返回元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76527298/

相关文章:

f# - 在 F# 中的选择之上构建要么(或结果)

f# - 在 F# 中,表达式的类型应为 'Nullable<DateTime>',但此处的类型为 'DateTime'

list - F# - 创建带有条件元素的列表

c# - asp C# 应用程序默认凭据不可用

c# - ASP.NET MVC 5 中的自定义授权过滤器?

C# XNA Box2d : What kind of joints for a ragdoll?

c# - 什么是虚拟代理?

c# - 如何获取系统帐户下的所有用户应用程序数据文件夹?

c# - 为什么 FSharpOption 的某些属性(例如 IsSome 和 IsNone)在 C# 中不可见?

f# - 如何为受歧视的联盟覆盖 .Equals() ?