【问题标题】:How to pass reference to the function如何传递对函数的引用
【发布时间】:2016-05-17 05:33:22
【问题描述】:

我将一些 VB 代码转换为 C# 。现在我被卡住了,我必须使用 ref 关键字传递参数。功能是

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

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

【问题讨论】:

标签: c# wpf visual-studio-2012


【解决方案1】:

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

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);

【讨论】:

  • 我想指出,试图通过ref (Z2 - Z1) 可能表明OP 误解了ref 在做什么。添加临时可能会隐藏/丢弃重要的计算。如果可以简单地丢弃这些值,ref 就没有任何意义。
  • 正确。但有时方法的签名需要通过引用传递值,但修改的结果(如果有的话)对调用者来说并不重要。我相信作者知道他在做什么,情况就是这样。
  • 我知道你提到的这种方法,但我想它是否可以这样工作
【解决方案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);

原因是,如果没有将某些东西分配给它可以引用自身的变量,您就不能通过引用来制作某些东西

【讨论】:

    【解决方案3】:

    您不能将“表达式”作为refout 参数传递。

    在 C# 中,ref 参数意味着您的参数“引用”将在函数内部发生更改,这就是您不能传递“表达式”的原因。

    您可以通过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);
    

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 2012-02-03
      • 2015-09-22
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2021-10-09
      • 2015-04-23
      相关资源
      最近更新 更多