Perl有能力:
my ($a,$b,$c,$d) = foo();
其中foo
返回4个变量,而不是一次分配一个变量。 C#中有类似的东西吗?
答案 0 :(得分:8)
不,基本上。选项:
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
答案 1 :(得分:2)
Tuple
可以是一个有用的构造。
public Tuple<int, string, double> Foo() { ... }
然后你可以这样做:
var result = Foo();
int a = result.Item1;
string b = result.Item2;
double c = result.Item3;
这是函数式编程风格对C#影响越来越大的遗留问题:元组是许多函数式语言的基本结构,并且在静态类型方面有很大的帮助。
答案 2 :(得分:1)
对于函数,您必须返回1个对象或void
。但是你可以通过几种方式解决这个问题。
struct
的数据结构,例如class
或a,b,c,d
,并将其作为您的函数返回,例如data foo()
数据将包含a,b,c,d out
关键字,例如foo(out a,out b,out c,out d),但是你的变量输入需要初始化。更多信息在这里。请参阅http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx ref
。请参阅http://msdn.microsoft.com/en-US/library/14akc2c7(v=vs.80).aspx arrray
或list
的集合形式返回,正如另一位成员指出的那样另外请记住,根据您传递的strcut对象的类型,您可以将值作为Value
或Reference
传递。见http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx