2010-05-27 61 views
6

方法应该返回多个值

我有C#中的方法,我必须从该方法返回多个值与使用集合像数组。有没有可靠的方法?

+0

能否请您扩大 “多值”?这是你的返回值的常数吗?它们是逻辑链接的吗?他们代表什么?它们是否属于同一类型? – Kobi 2010-05-27 06:30:06

+0

[我怎样才能从C#中的函数返回多个值?](http://stackoverflow.com/questions/748062/how-can-i-return-multiple-values-from-a-function-in -c) – 2016-06-03 23:18:56

回答

10

嗯,你可以使用:

  • 一个自定义的类/结构/类型,包含所有你的价值观
  • 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); 
2

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

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

是的,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 

编辑:

我看到了很多帖子所提出的建议,以创建自己的类此。这是没有必要的,因为.net为你提供了一个类来完成他们已经说过的事情。 Tuple类。

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

那么你可以像这样检索:

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

有通用的重载,所以你可以在你的元组有多达8种独特。

+3

另外,'Tuple.Create'方法可以推断出类型:'返回Tuple.Create(1,“some string”,'B');' – 2010-05-27 06:31:49

+3

请注意,Tuple是.NET 4.0的一个新特性,吉布可能还没有(尚)。 – 2010-05-27 06:34:42

0

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

顺便说一句,你不使用集合?

2

为什么要使用'out'是一种不可靠的方式? (或者是你犯了一个错字,并意味着没有?)

有几种方法:

  • 回报(结构/类等)
  • out
  • ref
  • 持有多个 值的对象
5

如果您使用的是.NET 4。0您可以使用generic Tuple类之一从方法调用中返回多个值。静态的Tuple类提供了创建Tuple对象的方法。所以你不必为该方法定义自己的返回类型。

public Tuple<string,int> Execute() 
{ 
    return new Tuple<string,int>("Hello World", 2); 
} 
+0

只是一个小点:所有8个Tuple类型在C#4.0中都是通用的。 – Kobi 2010-05-27 06:38:01

0
public int Method Name(out string stringValue, out int intValue) 
{ 
    /// 
      Method goes here 
    /// 

    return intVaraible 
} 

在这里,你会得到3返回值 1. stringValue的 2的intValue 3.了IntVariable