为什么在C# 7.3中,ref int值不会改变原始值?

3

我有以下代码:

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

请注意 SomeMethod 方法返回签名上的 ref 关键字。
这会产生以下输出:
x = 9, y = 23
x = 10, y = 23, z = 10
x = 10, y = 23, z = 20

我本想在最后一行得到与z值相同的x值。我错过了什么吗?

2个回答

4

你忽略了我们所说的不是对象或指针。

你只需将z的值设置为20,这与你传递的引用没有任何关系。


3
根据文档,当您执行以下操作时:
int z = SomeMethod(ref x, y);

你只是保存了SomeMethod返回的值(因为像int这样的结构体是值类型)。
你要找的是ref本地变量功能,它可以通过以下方式实现:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接