考虑一个返回两个值的函数。我们可以这样写:
// Using out:
string MyFunction(string input, out int count)
// Using Tuple class:
Tuple<string, int> MyFunction(string input)
// Using struct:
MyStruct MyFunction(string input)
哪一个是最佳实践?为什么?
发布于 2017-06-06 19:44:06
除了前面的答案之外,与System.Tuple
不同,C# 7引入了值类型元组,它是一种引用类型,并且还提供了改进的语义。
您仍然可以将它们保留为未命名,并使用.Item*
语法:
(string, string, int) getPerson()
{
return ("John", "Doe", 42);
}
var person = getPerson();
person.Item1; //John
person.Item2; //Doe
person.Item3; //42
但是这个新特性真正强大的地方是拥有命名元组的能力。所以我们可以像这样重写上面的代码:
(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()
发布于 2011-06-17 14:08:01
我认为答案取决于函数正在做什么的语义,以及两个值之间的关系。
例如,TryParse
方法接受一个out
参数来接受解析的值,并返回一个bool
来指示解析是否成功。这两个值实际上并不属于一起,因此,从语义上讲,使用out
参数更有意义,代码的意图也更易于阅读。
但是,如果您的函数在屏幕上返回某个对象的X/Y坐标,则这两个值在语义上属于同一个值,最好使用struct
。
我个人避免对外部代码可见的任何东西使用tuple
,因为检索成员的语法很笨拙。
发布于 2011-06-17 14:09:38
我将使用Out参数的方法,因为在第二种方法中,您需要创建和对象的Tuple类,然后向其添加值,我认为与返回out参数的值相比,这是一个开销很大的操作。但是,如果您想在Tuple Class中返回多个值(实际上,这不能仅通过返回一个out参数来实现),那么我将采用第二种方法。
https://stackoverflow.com/questions/6381918
复制相似问题