C# 使 2 个变量彼此相等

C# Making 2 variables equal one another

我编写了这段代码,应该使变量 currentlevelclicks 彼此相等。但是当我运行代码时却不是这样。

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;

    }
}

我很确定代码没有问题,但如果有问题请告诉我。

为什么它不起作用

currentlevelclicks是两个int,是一个值类型(一个struct)。这意味着每个字段都有一个独立的值。

那么 levelclicks = current; 所做的就是将 current 的值复制到 levelclicks 中。 而 levelclicks = levelclicks + 1; 所做的是增加 levelclicks 的值。它不会更改 current.

的值

为什么即使是引用类型也不起作用

即使您使用了引用类型 (a class),那仍然行不通,但出于另一个原因。

levelclicks = current; 确实会使两个字段引用同一个对象,如果您通过一个引用修改该对象,即使通过另一个引用访问它也会为您提供修改后的对象。

但是如果使用 levelclicks = levelclicks + 1;,您将获得 levelclicks 引用的对象,使用 +1 创建另一个对象,并在 levelclicks 中保存对该新对象的引用。然后 levelclickscurrent 将不再引用同一个对象。

但是,如果您可以修改内存中的对象而不是创建一个新对象,它就可以工作。但是,您不必保存引用(因为引用没有改变)。它就像 levelclicks.Add(1); 这样的东西,那个方法就是 return void.

回到你想做的事情。

为什么要两个不同的变量有相同的值?如果你有充分的理由,可以在 levelclicks = levelclicks + 1; 下方添加

  • current = current + 1;
  • current = levelclicks;