当我从另一个类调用数组时,数组不会更新

Posted

技术标签:

【中文标题】当我从另一个类调用数组时,数组不会更新【英文标题】:Array doesn't update when i call it from another class 【发布时间】:2019-05-22 20:02:47 【问题描述】:

我正在尝试为学校作业编写黑白棋游戏,但我有一个 当我从另一个类调用数组时出现问题。

我使用这个 if 语句来检查移动是否合法。它从 playermove 类调用 CheckLegal 移动方法。

 if(PlayerMove.CheckLegal(Yarray,Xarray))
                
                    //changes the turn
                    if (turn)  turn = false;  else  turn = true; 
                    if (turn)  value = 1;  else  value = -1; 

                    GameState[Yarray, Xarray] = value;

                    Board.Invalidate();
                

CheckLegal 方法是这样的。

public bool CheckLegal(int Yarray,int Xarray)
        
            var Form1 = new Form1();
            bool result;
            if(Convert.ToInt32(Form1.GameState.GetValue(Yarray,Xarray)) == 0)  result = true; 
            else  result = false; 
            return result;
        

If 语句,如果为真,则在某个点更改 Gamestate 数组的值。唯一的问题是,当我在 Checklegal 方法中调用 Gamestate 数组时,我没有得到更新的值。但是如果 CheckLegal 方法不在另一个类中,我会得到更新的值。

谁能解释一下这是如何工作的? 以及如何在我的 PlayerMove 类中获取更新后的 Gamestate 值?

【问题讨论】:

var Form1 = new Form1(); 创建一个新实例 - 它没有连接到您调用它的那个 您正在创建Form1 的新实例,而应该使用已经存在的表单实例。 【参考方案1】:

您正在创建一个新表单来检查数组,这一定会失败。

public bool CheckLegal(int Yarray,int Xarray)

    var Form1 = new Form1();

这就像制造一辆新车来检查您是否将钱包留在控制台中。我的意思是你肯定可以造一辆新车,但你的钱包不可能在那里

考虑将数组设为静态,或在需要时传递数组


进一步阅读

static (C# Reference)

使用static修饰符声明一个静态成员,它属于 类型本身而不是特定对象。静态修饰符 可以与类、字段、方法、属性、运算符一起使用, 事件和构造函数,但不能与索引器一起使用, 终结器,或类以外的类型。

Passing arrays as arguments (C# Programming Guide)

数组可以作为参数传递给方法参数。因为数组 是引用类型,方法可以改变元素的值。

【讨论】:

天哪,非常感谢。让它静态工作。我知道它一定是那样的小而愚蠢的东西。但我无法弄清楚几个小时。真的谢谢你。 @peerisfruit static 可能不是最好的设计,但它至少向您展示了如何解决眼前的问题。您也可以考虑在更基本的位置声明数组。并传递它

以上是关于当我从另一个类调用数组时,数组不会更新的主要内容,如果未能解决你的问题,请参考以下文章

从另一个屏幕调用函数时 useState 数组未更新

当我从另一个调用接口方法时,Spring Boot(Java)中出现以下错误

当我从另一个视图控制器调用时,为啥我的表视图为零?

当我从另一个窗体调用一个窗口时,它显示两个窗口一个在另一个的顶部

useState setter 方法不更新数组

如何将对象添加到ArrayList?