为什么ref int值与C#7.3中的原始值不一样?

时间:2018-07-05 15:18:43

标签: c#

我有以下代码:

implementation('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true
}

请注意SomeMethod的方法返回签名上的 ref

这将产生以下输出:

    static void Main(string[] args)
    {
        var x = 9;
        var y = 23;
        Console.WriteLine($"x = {x}, y = {y}");

        var z = SomeMethod(ref x, y);

        Console.WriteLine($"x = {x}, y = {y}, z = {z}");

        z = 20;
        Console.WriteLine($"x = {x}, y = {y}, z = {z}");

        Console.ReadLine();
    }

    private static ref int SomeMethod(ref int x, int y)
    {
        x++;
        y++;
        return ref x;
    }

我期望最后一行的x值与z值相同。我想念什么?

2 个答案:

答案 0 :(得分:4)

您错过了我们不在谈论对象或指针的信息。

您只需将ruby-2.3.4@projectname的值设置为z。这与您复制的引用无关。

答案 1 :(得分:3)

根据documentation,当您这样做时:

int z = SomeMethod(ref x, y);

您只保留SomeMethod返回的值(假设结构,例如int是值类型)。

您正在寻找的是ref local功能,可以通过以下方式实现:

ref int z = ref SomeMethod(ref x, y);

然后,当您修改z时,实际上是在修改x

x = 9, y = 23
x = 10, y = 23, z = 10
x = 20, y = 23, z = 20