从方法返回2个值

时间:2010-11-27 09:16:31

标签: c#

这是一个数学方法,输入3个双打(a,b,c)。

接下来,这3个值在公式(平方根的abc公式)中计算。

该公式有两个必须返回的值,但具体如何?

我在想一个数组/对象,但不知道如何为此目的初始化它们。在这种情况下,out参数是不是真的有用呢?

问候。

5 个答案:

答案 0 :(得分:3)

在C#4中(在Visual Studio 2010中可用):

Tuple<double, double> Foo(double a, double b, double c)
{
   ...
   return Tuple.Create(firstReturnValue, secondReturnValue);
}

如果您使用的是早期语言版本的C#,您可以按如下方式定义自己的二元组(对)实现:

public struct Tuple<A, B>
{
   public readonly A Item1;
   public readonly B Item2;
   public Tuple(A a, B b) { Item1 = a; Item2 = b; }
}
public static class Tuple
{
   public static Tuple<A,B> Create<A,B>(A a, B b) { return new Tuple<A,B>(a,b); }
}

当然,Tuple是一种非常通用且非特定的数据类型。你也可以实现一个复合返回类型(类似于我刚才展示的,但更简单),它更适合你的情况。

答案 1 :(得分:2)

用完:

double t;
int y = Foo(5,3,out t);

DEF:

public int Foo(int one,int two,out double three) {
  three = one / two;
  return one + two;
}

http://msdn.microsoft.com/en-us/library/ee332485.aspx

答案 2 :(得分:1)

在C#4中,你可以像上面的staks所描述的那样做元组

但在c#4下面,您可以返回一个列表,其中包含您想要返回的值。

答案 3 :(得分:0)

数组并不是非常有利,因为你只有一堆项目,而且没有任何关于它们的进一步信息。调用者必须以某种方式“知道”什么元素没有。 0,元素号1是。

在这种情况下,我总是会投票使用一个类 - 将一个返回类型定义为一个类,给各个字段赋予有意义的名称。一个类为您提供可发现性(通过字段名称),混合返回类型的能力(返回INT,两个DECIMAL,一个STRING),并且它很好地封装了您的结果:

public class ResultType
{
    decimal Value { get; set; }
    decimal AnotherValue { get; set; }
    int StatusCode { get; set; } 
    string Message { get; set; }
}

然后将您的方法定义为:

ResultType YourMethodName(double a, double b, double c) 
{
     ResultType result = new ResultType();

     // do your calculations here......
     result.Value = .........
     result.AnotherValue = ............
     result.StatusCode = 0;
     result.Message = "everything OK";

     return result;
}

答案 4 :(得分:0)

我为此目的创建了一个类,即使是一个简单的结构,但是一个元组(如stakx建议的)也同样好,甚至列表或集合也可以做到这一点。