根据 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/