【问题标题】:What is the meaning of the C#' syntax, "out" variable as a parameter? [duplicate]C#'语法,“out”变量作为参数是什么意思? [复制]
【发布时间】:2014-02-11 03:16:27
【问题描述】:

我有一行来自其他人的代码:类似...

public static bool ScreenToMapPosition (Vector2 ScreenCoord, out Int2 MapPosition)

澄清一下,我理解正确吗?

当我调用该函数时,它会返回:

  1. 返回布尔值,真/假

  2. 还返回 MapPosition?

这是“出”的意思吗?

所以实际上,我输入一个 Int2 MapPosition 只是为了给它一个新值?

几乎一样

public static Int2 ScreenToMapPosition (Vector2 ScreenCoord)
{
    Int2 MapPosition = //blah blah code code;
    return MapPosition;
}

【问题讨论】:

标签: c# syntax


【解决方案1】:

这意味着它在方法中设置的值,将是你调用它时发送的变量的值。例如:

Int2 mapPos;
ScreenToMapPosition(screenCord, out mapPos);

这里mapPos 将具有它设置为在方法内部的值 ScreenToMapPosition

【讨论】:

    【解决方案2】:

    所以实际上,我输入一个 Int2 MapPosition 只是为了给它一个新值?

    我将把它改写为:

    所以实际上,我输入了一个 Int2 MapPosition,它肯定是一个新值?

    将创建Int2 类的新实例,并且您为MapPosition 参数传入的变量将设置为此实例。

    out 只是说之前的变量值将不是预期的,甚至会被丢弃并创建一个新的值。

    这与 ref 不同,你需要传入一个初始化的对象。

    【讨论】:

      【解决方案3】:

      MSDN 上的这篇文章解释了 out 参数是从方法返回值的另一种方式。

      这个 MSDN 示例说明了这一点:

      static void Method(out int i)
      {
          i = 44;
      }
      
      static void Main()
      {
          int value;
          Method(out value);
          // value is now 44
      }
      

      【讨论】:

        【解决方案4】:

        您是正确的,因为该方法返回一个布尔值(真/假)。

        参数上的 out 关键字表示参数是通过引用传入的,这意味着在方法之外声明的变量可以在方法内部更改而无需显式返回。

        【讨论】:

        • 错了。 ref 关键字就是这样做的。 out 关键字表示在任何情况下都会在方法中创建一个新实例,并且您传入的值将被丢弃。
        • 顺便说一句:通过引用传递是 C# 中对象参数的默认设置。 out 表示引用由于调用方法而改变,ref 表示引用可能改变。
        • 我对 bitsi 的感谢已被删除,显然是有人不想知道 bitsi 的答案是最好的,或者有人不想让我对 bitsi 的正确答案表示感谢。
        猜你喜欢
        • 1970-01-01
        • 2021-01-23
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 2019-09-12
        相关资源
        最近更新 更多