将 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?如果我只想获得这两个输出中的任何一个,有没有办法?

将 Out 参数分配给具有索引 c# 的数组元素

不确定你的意思,但我会这样猜测:

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
}