方法应该返回多个值

时间:2010-05-27 06:10:46

标签: c#

斐伊川

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

7 个答案:

答案 0 :(得分: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种唯一类型。

答案 1 :(得分: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 :(得分:5)

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

为什么使用'out'是不可靠的方式? (或者你输了一个错字而没有?)

有几种方法:

  • 返回一个包含多个的对象 值(结构/类等)
  • out
  • ref

答案 5 :(得分:0)

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

Btw是什么让你不要使用收藏品?。

答案 6 :(得分:0)

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

    return intVaraible
}

这里你将获得3个返回值 1.tringValue 2. intValue 3. intVariable

相关问题