C# 如何在一条语句中指定变量列表
Perl能够做到:C# 如何在一条语句中指定变量列表,c#,perl,C#,Perl,Perl能够做到: my ($a,$b,$c,$d) = foo(); 其中foo返回4个变量,而不是一次分配一个。C#中有类似的东西吗?基本上没有。选项: object[] values = foo(); int a = (int)values[0]; string b = (string)values[1]; // etc 或: 或: 对于函数,必须返回1个对象或void。但是你可以用几种方法来解决这个问题 您可以创建一个数据结构,如struct或class,其中将包含a、b、c、d,
my ($a,$b,$c,$d) = foo();
其中
foo
返回4个变量,而不是一次分配一个。C#中有类似的东西吗?基本上没有。选项:
object[] values = foo();
int a = (int)values[0];
string b = (string)values[1];
// etc
或:
或:
对于函数,必须返回1个对象或
void
。但是你可以用几种方法来解决这个问题
struct
或class
,其中将包含a、b、c、d
,并将其作为函数返回,例如data foo()
数据将包含a、b、c、dout
关键字,例如foo(out a、out b、out c、out d),但您的变量输入需要初始化。更多信息请点击这里。看ref
。看arrray
或list
还请记住,根据您传递strct vs对象的类型,您的值可以作为
值
或参考
传递。请参见元组
可以是一个有用的构造
public Tuple<int, string, double> Foo() { ... }
这是函数式编程风格对C#的影响日益增强的结果:元组是许多函数式语言中的基本构造,在静态类型方面有很大的帮助。为什么不为它创建一个类呢?当然不,但正如@491243所说,您可以使用classJust interest-当这个功能有用时?当您有一个返回大量参数的函数时,它的类型就更少了,perl表示法似乎很简单,它取决于
foo()
返回的内容。一个方法只能有一个返回类型,但该类型可以是可枚举的,如列表
或数组。如果您真的需要从一个方法返回各种变量类型,那么该方法可能做得太多了。@lazyberezovsky归根结底,所有这些都是从函数向外表达多个值的方法,并在调用方将它们分配给局部变量;其机制(列表等)是实现细节。如果要枚举错误选项,我想还可以包含一个元组:)
。显然,C#将用户指向第二个选项-返回一个有意义的类。在我目前的职位上,当我用一个元组来解决一个类似的问题时,和我一起工作的那个家伙说他希望他以前见过它。显然,该团队创建新类的历史很长,只是为了在从方法返回数据时保存值。Ad 4。数组、列表或(最好)一个IEnumerable
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
public Tuple<int, string, double> Foo() { ... }
var result = Foo();
int a = result.Item1;
string b = result.Item2;
double c = result.Item3;