gpt4 book ai didi

c# - 返回两个值,元组 vs 'out' vs 'struct'

转载 作者:IT王子 更新时间:2023-10-29 03:40:48 27 4
gpt4 key购买 nike

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

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

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

// Using struct:
MyStruct MyFunction(string input)

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

最佳答案

它们各有优缺点。

Out 参数快速且便宜,但需要您传入一个变量,并依赖于变异。在 LINQ 中正确使用输出参数几乎是不可能的。

元组会产生收集压力1 并且不会 self 记录。 “Item1”描述性不强。

如果自定义结构较大,则复制起来可能会很慢,但如果它们很小,则可以 self 记录并且高效。然而,为琐碎的用途定义一大堆自定义结构也是一件痛苦的事情。

在所有其他条件相同的情况下,我倾向于自定义结构解决方案。更好的方法是制作一个只返回一个值的函数。为什么首先要返回两个值?

请注意,C# 7 中的元组(在编写此答案后六年发布)是值类型,因此不太可能产生收集压力。


1 每次您从堆中分配一个小对象时,都会对垃圾收集器施加“压力”。压力越大,催收越频繁。在某些应用程序中,控制产生的收集压力量很重要,因此在这些应用程序中不必要地分配几百万个元组可能是一件坏事。当然,就像所有性能问题一样,在了解问题的严重性之前,不要盲目地进行更改。

关于c# - 返回两个值,元组 vs 'out' vs 'struct',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com