为什么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