如何传递对函数的引用
How to pass reference to the function
我将一些 VB 代码转换为 C#。现在我陷入了困境,我必须使用 ref 关键字传递参数。函数是
CurrentZone.Radius = ModSoftUniversal.perirad(ref (Z2 - Z1), ref ( Xval - Xinc - CurrentZone.Centerx), ref ( dXval - CurrentZone.Centerx), ref ErrorFlag);
函数中的参数正在做一些计算并将值传递给函数,必须使用 ref。
Visual Studio 显示以下 。我需要帮助传递参数
不能通过引用传递表达式。像这样添加临时变量:
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);
像这样编写代码
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);
原因是如果某个东西没有分配给它可以引用自身的变量,你就不能通过引用创建它
您不能将 "expression" 作为 ref
或 out
参数传递。
在 C# 中 ref
参数意味着您的参数 "reference" 将在函数内部更改,这就是为什么您不能传递 "expression".
您可以在 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);
我将一些 VB 代码转换为 C#。现在我陷入了困境,我必须使用 ref 关键字传递参数。函数是
CurrentZone.Radius = ModSoftUniversal.perirad(ref (Z2 - Z1), ref ( Xval - Xinc - CurrentZone.Centerx), ref ( dXval - CurrentZone.Centerx), ref ErrorFlag);
函数中的参数正在做一些计算并将值传递给函数,必须使用 ref。
Visual Studio 显示以下
不能通过引用传递表达式。像这样添加临时变量:
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);
像这样编写代码
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);
原因是如果某个东西没有分配给它可以引用自身的变量,你就不能通过引用创建它
您不能将 "expression" 作为 ref
或 out
参数传递。
在 C# 中 ref
参数意味着您的参数 "reference" 将在函数内部更改,这就是为什么您不能传递 "expression".
您可以在 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);