将 Out 参数分配给具有索引 c# 的数组元素
本文关键字:索引 数组元素 Out 参数 分配 | 更新日期: 2023-09-27 18:33:48
>我有一个函数包装器,定义如下: 在这里,我传入一组系数(inputArr)和一个包含2个双精度数组的元组。
预期的输出是"WminObjectivefunction"应该被调用多少次,并且还返回"FuncValue",它基本上是在"inputArr"处评估的"WminObjectivefunction"。每次我调用"WrapFunction"时,传递的数组"inputArr"都会有所不同。
public void WrapFunction(out int ncalls, out double FuncValue, double[] inputArr, Tuple<List<double>, List<double>> arguments)
{
int calls = 0;//Number_of_FunctionEvaluations
// MASTER class instance
Master prismpy = new Master();
calls += 1;//Number_of_FunctionEvaluations_Increment
ncalls = calls;//Return_Number_of_FunctionEvaluations
FuncValue = prismpy.WminObjectivefunction(inputArr, arguments.Item1, arguments.Item2);//Return_FunctionValuation
}
问题 1:我想将 FuncValue 存储为数组 fsim 中的元素,如何命令 WrapFunction 将值存储为由索引表示的数组元素。以下是我尝试过的,错误是:无法隐式将"void"转换为"double"
// FSIM: put array in array of arrays
double[] fsim = new double[5];
int fcall;
fsim[0] = WrapFunction(out fcall, out fsim[0], _x0, args);
问题2:是否有必要每次都调用所有参数的WrapFunction?如果我只想获得这两个输出中的任何一个,有没有办法?
不确定你的意思,但我会这样猜测:
public double WrapFunction(out int ncalls, out double FuncValue, double[] inputArr, Tuple<List<double>, List<double>> arguments)
{
int calls = 0;//Number_of_FunctionEvaluations
// MASTER class instance
Master prismpy = new Master();
calls += 1;//Number_of_FunctionEvaluations_Increment
ncalls = calls;//Return_Number_of_FunctionEvaluations
FuncValue = prismpy.WminObjectivefunction(inputArr, arguments.Item1, arguments.Item2);//Return_FunctionValuation
return FuncValue;
// NOTE: the FuncValue parameter may be redundant -- RBarryYoung
}
这是另一个版本,反映了一些评论/讨论:
int calls = 0;//Number_of_FunctionEvaluations
public double WrapFunction(out int ncalls, double[] inputArr, Tuple<List<double>, List<double>> arguments)
{
// MASTER class instance
Master prismpy = new Master();
calls += 1;//Number_of_FunctionEvaluations_Increment
ncalls = calls;//Return_Number_of_FunctionEvaluations
return prismpy.WminObjectivefunction(inputArr, arguments.Item1, arguments.Item2);//Return_FunctionValuation
}