C# 使 2 个变量彼此相等
C# Making 2 variables equal one another
我编写了这段代码,应该使变量 current
和 levelclicks
彼此相等。但是当我运行代码时却不是这样。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Threading;
using System.Threading.Tasks;
public class GameManager : MonoBehaviour
{
public int current;
public int levelclicks;
public void IncreaseValue()
{
levelclicks = levelclicks + 1;
}
void LevelUp()
{
levelclicks = current;
}
}
我很确定代码没有问题,但如果有问题请告诉我。
为什么它不起作用
current
和levelclicks
是两个int,是一个值类型(一个struct
)。这意味着每个字段都有一个独立的值。
那么 levelclicks = current;
所做的就是将 current
的值复制到 levelclicks
中。
而 levelclicks = levelclicks + 1;
所做的是增加 levelclicks
的值。它不会更改 current
.
的值
为什么即使是引用类型也不起作用
即使您使用了引用类型 (a class
),那仍然行不通,但出于另一个原因。
levelclicks = current;
确实会使两个字段引用同一个对象,如果您通过一个引用修改该对象,即使通过另一个引用访问它也会为您提供修改后的对象。
但是如果使用 levelclicks = levelclicks + 1;
,您将获得 levelclicks
引用的对象,使用 +1 创建另一个对象,并在 levelclicks
中保存对该新对象的引用。然后 levelclicks
和 current
将不再引用同一个对象。
但是,如果您可以修改内存中的对象而不是创建一个新对象,它就可以工作。但是,您不必保存引用(因为引用没有改变)。它就像 levelclicks.Add(1);
这样的东西,那个方法就是 return void
.
回到你想做的事情。
为什么要两个不同的变量有相同的值?如果你有充分的理由,可以在 levelclicks = levelclicks + 1;
下方添加
current = current + 1;
current = levelclicks;
我编写了这段代码,应该使变量 current
和 levelclicks
彼此相等。但是当我运行代码时却不是这样。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Threading;
using System.Threading.Tasks;
public class GameManager : MonoBehaviour
{
public int current;
public int levelclicks;
public void IncreaseValue()
{
levelclicks = levelclicks + 1;
}
void LevelUp()
{
levelclicks = current;
}
}
我很确定代码没有问题,但如果有问题请告诉我。
为什么它不起作用
current
和levelclicks
是两个int,是一个值类型(一个struct
)。这意味着每个字段都有一个独立的值。
那么 levelclicks = current;
所做的就是将 current
的值复制到 levelclicks
中。
而 levelclicks = levelclicks + 1;
所做的是增加 levelclicks
的值。它不会更改 current
.
为什么即使是引用类型也不起作用
即使您使用了引用类型 (a class
),那仍然行不通,但出于另一个原因。
levelclicks = current;
确实会使两个字段引用同一个对象,如果您通过一个引用修改该对象,即使通过另一个引用访问它也会为您提供修改后的对象。
但是如果使用 levelclicks = levelclicks + 1;
,您将获得 levelclicks
引用的对象,使用 +1 创建另一个对象,并在 levelclicks
中保存对该新对象的引用。然后 levelclicks
和 current
将不再引用同一个对象。
但是,如果您可以修改内存中的对象而不是创建一个新对象,它就可以工作。但是,您不必保存引用(因为引用没有改变)。它就像 levelclicks.Add(1);
这样的东西,那个方法就是 return void
.
回到你想做的事情。
为什么要两个不同的变量有相同的值?如果你有充分的理由,可以在 levelclicks = levelclicks + 1;
下方添加
current = current + 1;
current = levelclicks;