Perl 有能力做:
my ($a,$b,$c,$d) = foo();
wherefoo
返回 4 个变量,而不是一次分配一个。C#中有类似的东西吗?
不,基本上。选项:
object[] values = foo();
int a = (int)values[0];
string b = (string)values[1];
// etc
或者:
var result = foo();
// then access result.Something, result.SomethingElse etc
或者:
int a;
string b;
float c; // using different types to show worst case
var d = foo(out a, out b, out c); // THIS WILL CONFUSE PEOPLE and is not a
// recommendation
Tuple
可能是一个有用的结构。
public Tuple<int, string, double> Foo() { ... }
然后你可以这样做:
var result = Foo();
int a = result.Item1;
string b = result.Item2;
double c = result.Item3;
这是函数式编程风格对 C# 的影响越来越大的遗留问题:元组是许多函数式语言中的基本结构,并且极大地帮助了它们的静态类型。
对于函数,您必须返回 1 个对象或void
. 但是您可以通过多种方式解决这个问题。
struct
或 a class
,它将包含a,b,c,d
并作为您的函数返回,例如data foo()
data 将包含 a,b,c,dout
在函数的参数中使用关键字,例如 foo(out a, out b, out c, out d),但需要初始化变量输入。更多信息在这里。请参阅http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspxref
与 out 类似的。请参阅http://msdn.microsoft.com/en-US/library/14akc2c7(v=vs.80).aspxarrray
或 a list
,正如另一个成员指出的那样另请记住,根据您传递的类型 strcut 与您重视的对象可能作为 aValue
或传递Reference
。请参阅http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx