C#语法”out”变量作为参数的含义是什么?

What is the meaning of the C#' syntax, “out” variable as a parameter?

本问题已经有最佳答案,请猛点这里访问。

我有一行别人写的代码,比如…

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

只是说清楚,我是否理解正确?

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

  • 返回bool,真/假

  • 还返回映射位置?

  • 这就是"out"的意思?

    所以实际上,我输入了一个int2映射位置,这样我就可以给它一个新的值了?

    几乎和

    1
    2
    3
    4
    5
    public static Int2 ScreenToMapPosition (Vector2 ScreenCoord)
    {
        Int2 MapPosition = //blah blah code code;
        return MapPosition;
    }


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

    1
    2
    Int2 mapPos;
    ScreenToMapPosition(screenCord, out mapPos);

    这里,mapPos的值在方法ScreenToMapPosition中设置为。


    So in effect, I enter a Int2 MapPosition just so I can have it given a new value?

    我将把这个改成:

    So in effect, I enter a Int2 MapPosition and it will for sure be a new value?

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

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

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


    "out"允许您通过引用传递变量并在方法中修改变量。它通常用于将多个对象传入和传出一个方法,而不必将它们全部包装在一个容器对象中。


    这篇关于msdn的文章解释了out参数是从方法返回值的另一种方法。

    这个msdn样本清楚地表明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static void Method(out int i)
    {
        i = 44;
    }

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

    方法返回布尔值(真/假)是正确的。

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