Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ref int值不改变C#7.3中的原始值?_C# - Fatal编程技术网

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

为什么ref int值不改变C#7.3中的原始值?,c#,C#,我有以下代码: 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;

我有以下代码:

    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

我希望最后一行的x值与z值相同。我遗漏了什么?

您遗漏了我们不是在谈论对象或指针

只需将
z
的值设置为
20
。这与您复制的引用无关。

根据,执行此操作时:

int z = SomeMethod(ref x, y);
您只保留由
SomeMethod
返回的值(给定该结构,例如
int
,是值类型)

您需要的是该功能,它是通过以下方式实现的:

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