要返回两个值,Tuple 和'out'和'struct'哪个好?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

考虑一个返回两个值的函数。我们可以写:

// Using out:
string MyFunction(string input, out int count)

// Using Tuple class:
Tuple<string, int> MyFunction(string input)

// Using struct:
MyStruct MyFunction(string input)

哪一个是最佳实践,为什么?

提问于
用户回答回答于

他们各有利弊。

输出参数既快又方便,但要求你传入一个变量,并依赖于变异。在LINQ中正确使用out参数几乎是不可能的。

元组产生收集压力并且是非自我记录的。“Item1”不是很具描述性。

如果自定义结构很大,则自定义结构的拷贝速度可能会很慢,但如果它们很小,则自我记录并且效率很高。然而,定义一大堆用于微不足道的用途的定制结构也是一种痛苦。

我会倾向于定制结构解决方案所有其他的东西是平等的。更好的做法是创建一个只返回一个值的函数。为什么你首先返回两个值?

用户回答回答于

我认为答案取决于函数的语义以及这两个值之间的关系。

例如,TryParse方法采取out参数以接受已解析的值,并返回bool表示解析是否成功。这两个值并不真正属于一起,因此,在语义上,它更有意义,代码的意图更易于阅读。out参数。

但是,如果你的函数返回屏幕上某个对象的X/Y坐标,那么这两个值在语义上属于一起,最好使用struct

我个人会避免使用tuple对于任何外部代码都是可见的,因为检索成员的语法很笨拙。

所属标签

可能回答问题的人

  • 天使的炫翼

    15 粉丝531 提问25 回答
  • 富有想象力的人

    2 粉丝0 提问22 回答
  • 腾讯云-ahqzhang

    0 粉丝0 提问19 回答
  • 旺仔小小鹿

    社区 · 运营 (已认证)

    48 粉丝0 提问18 回答

扫码关注云+社区

领取腾讯云代金券