Class 方法到 return 多个结果(列表和多维数组)

Class method to return multiple results (lists and multi-dimensional arrays)

我有一个 class 方法,它可以生成一些结果并填充 List 和 double[]。因此,在进行计算时,最终结果存储在 double[] 中,但中间结果存储在列表中。

像这样:

public double[,] methodOne(Dictionary<string, double> myInputOne, List<double> myInputTwo)
{
List<double> intermediateResults= new List<double>();
double[,] finalResults= new double[rows, cols];

// Do some calculation using myInputOne and myInputTwo

intermediateResults.Add(something);

// Continue the calculation using also intermediateResults
// store results in double[,] finalResults

return results ;
}

仅当您希望该方法 return 结果 table 时才有效。但是我怎样才能告诉方法 return 还有 List intermediateResults?

我希望此方法能够 return 中间结果和最终结果,以便它们可以在以后的其他方法中使用。谢谢你。

而不是 return 单个类型或元组,return 自定义对象,因为它会使调用代码更具可读性:

public class Results
{
    public List<double> IntermediateResults { get; set; }
    public double[,] FinalResults { get; set; }
}

那么您的方法类似于:

public Results methodOne(Dictionary<string, double> myInputOne, List<double> myInputTwo)
{
   List<double> intermediateResults = new List<double>();
   double[,] finalResults = new double[rows, cols];

   // Do some calculation using myInputOne and myInputTwo

   intermediateResults.Add(something);

   // Continue the calculation using also intermediateResults
   // store results in double[,] finalResults

   var results = new Results();
   results.FinalResult = finalResult;
   results.IntermediateResults = intermediateResults;

   return results;
}

您可以将 return 类型更改为 Tuple<T1, T2>

所以方法声明会变成

public Tuple<List<double>, double[,]> methodOne(Dictionary<string, double> myInputOne, List<double> myInputTwo)

反过来,你会 return

return new Tuple<List<double>, double[,]>(intermediateResults, finalResults);

但是,这取决于您希望如何使用 returned 数据。如果这不仅仅是短期结果,您最好只制作一个自定义对象,正如 Ralph Willgoss 所建议的那样。

其他提供的答案的一个选项是 out-关键字。你的情况:

public double[,] methodOne(Dictionary<string, double> myInputOne, 
    List<double> myInputTwo, out List<double> intermediateResults)
{
    intermediateResults= new List<double>();
    double[,] finalResults= new double[rows, cols];

    // Do some calculation using myInputOne and myInputTwo

    intermediateResults.Add(something);

    // Continue the calculation using also intermediateResults
    // store results in double[,] finalResults

    return results ;
}

用法:

List<double> intermediateResults;
double[,] finalResults = methodOne(someDictionary, someList, out intermediateResults);