首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回两个值,元组vs 'out‘vs 'struct’

返回两个值,元组vs 'out‘vs 'struct’
EN

Stack Overflow用户
提问于 2011-06-17 14:01:53
回答 5查看 31.1K关注 0票数 97

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

代码语言:javascript
复制
// Using out:
string MyFunction(string input, out int count)

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

// Using struct:
MyStruct MyFunction(string input)

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

EN

回答 5

Stack Overflow用户

发布于 2017-06-06 19:44:06

除了前面的答案之外,与System.Tuple不同,C# 7引入了值类型元组,它是一种引用类型,并且还提供了改进的语义。

您仍然可以将它们保留为未命名,并使用.Item*语法:

代码语言:javascript
复制
(string, string, int) getPerson()
{
    return ("John", "Doe", 42);
}

var person = getPerson();
person.Item1; //John
person.Item2; //Doe
person.Item3;   //42

但是这个新特性真正强大的地方是拥有命名元组的能力。所以我们可以像这样重写上面的代码:

代码语言:javascript
复制
(string FirstName, string LastName, int Age) getPerson()
{
    return ("John", "Doe", 42);
}

var person = getPerson();
person.FirstName; //John
person.LastName; //Doe
person.Age;   //42

还支持解构:

(string firstName, string lastName, int age) = getPerson()

票数 33
EN

Stack Overflow用户

发布于 2011-06-17 14:08:01

我认为答案取决于函数正在做什么的语义,以及两个值之间的关系。

例如,TryParse方法接受一个out参数来接受解析的值,并返回一个bool来指示解析是否成功。这两个值实际上并不属于一起,因此,从语义上讲,使用out参数更有意义,代码的意图也更易于阅读。

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

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

票数 21
EN

Stack Overflow用户

发布于 2011-06-17 14:09:38

我将使用Out参数的方法,因为在第二种方法中,您需要创建和对象的Tuple类,然后向其添加值,我认为与返回out参数的值相比,这是一个开销很大的操作。但是,如果您想在Tuple Class中返回多个值(实际上,这不能仅通过返回一个out参数来实现),那么我将采用第二种方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6381918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档