方法应该返回多个值

HII

我在C#中有方法,我必须从该方法返回多个值而不使用像数组这样的集合。 有可靠的方法吗?

好吧,你可以使用:

  • 自定义类/结构/类型,包含所有值
  • out参数

即:

 class MyValues { public string Val1 { get; set; } public int Val2 {get; set; } } public MyValues ReturnMyValues(); 

要么

 public void ReturnMyValues(out string Val1, out int Val2); 

是的, out关键字:

 public void ReturnManyInts(out int int1, out int int2, out int int3) { int1 = 10; int2 = 20; int3 = 30; } 

然后像这样称呼它:

 int i1, i2, i3; ReturnManyInts(out i1, out i2, out i3); Console.WriteLine(i1); Console.WriteLine(i2); Console.WriteLine(i3); 

哪个输出:

 10 20 30 

编辑:

我看到很多post都建议为此创建自己的课程。 这不是必需的,因为.net为你提供了一个他们已经说过的课程。 Tuple课。

 public Tuple ReturnMany() { return new Tuple(1, "some string", 'B'); } 

然后你可以像这样检索它:

 var myTuple = ReturnMany(); myTuple.Item1 ... myTuple.Item2 ... 

存在generics重载,因此您的元组中最多可以包含8种唯一类型。

如果您使用的是.NET 4.0,则可以使用其中一个通用Tuple类从方法调用中返回多个值。 静态Tuple类提供了创建Tuple对象的方法。 因此,您不必为方法定义自己的返回类型。

 public Tuple Execute() { return new Tuple("Hello World", 2); } 

是可以创建一个包含多个属性的新类型,然后返回此类型:

 public MyType MyMethod() { return new MyType { Prop1 = "foo", Prop2 = "bar" }; } 

为什么使用’out’是不可靠的方式? (或者你是否打错了而没有?)

有几种方法:

  • 返回一个包含多个值的对象(struct / class等)
  • REF

描述符类或结构。 你必须把它放在某个地方,因为一个方法必须只返回一个值是合乎逻辑的。 或者你可以使用out或ref,但我会返回一个类。

是什么让你不要使用collections品?

 public int Method Name(out string stringValue, out int intValue) { /// Method goes here /// return intVaraible } 

在这里你将得到3个返回值1. stringValue 2. intValue 3. intVariable