我有以下代码:
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值相同。我想念什么?
答案 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