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);
我有一个 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);