如何传递对函数的引用

时间:2016-05-17 05:33:22

标签: c# wpf visual-studio-2012

我将一些VB代码转换为C#。现在我陷入困境,我必须使用 ref 关键字传递参数。功能是

CurrentZone.Radius = ModSoftUniversal.perirad(ref  (Z2 - Z1), ref ( Xval - Xinc - CurrentZone.Centerx), ref ( dXval - CurrentZone.Centerx), ref ErrorFlag);

函数中的参数正在进行一些计算并将值传递给函数,必须使用 ref 。 Visual Studio显示以下enter image description here。我需要帮助传递参数

3 个答案:

答案 0 :(得分:6)

您无法通过引用传递表达式。像这样添加临时变量:

var z = Z2 - Z1;
var x1 = Xval - Xinc - CurrentZone.Centerx;
var x2 = dXval - CurrentZone.Centerx;
CurrentZone.Radius = ModSoftUniversal.perirad(ref z, ref x1, ref x2, ref ErrorFlag);

答案 1 :(得分:2)

制作像这样的代码

var z1z2Result = (Z2 - Z1);
var xValxIncres = (Xval - Xinc - CurrentZone.Centerx);
var dxValResult = (dXval - CurrentZone.Centerx);

ModSoftUniversal.perirad(ref  z1z2Result, ref xValxIncres, ref dxValResult, ref ErrorFlag);

原因是你不能通过引用做出某些东西,如果它没有分配给它可以引用自己的变量

答案 2 :(得分:2)

您无法将“表达式”作为refout参数传递。

在C#ref参数中意味着您的参数“reference”将在函数内部更改,这就是您无法传递“表达式”的原因。

您可以在https://msdn.microsoft.com/en-AU/library/14akc2c7.aspx

了解更多相关信息

所以,你的代码看起来应该是这样的:

int Z3 = (Z2 - Z1);
int X1 = ( Xval - Xinc - CurrentZone.Centerx);
int X2 = ( dXval - CurrentZone.Centerx);
bool ErrorFlag = false;
CurrentZone.Radius = ModSoftUniversal.perirad(ref Z3, ref X1, ref X2, ref ErrorFlag);