【问题标题】: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 的新实例,而应该使用已经存在的表单实例。

标签: c# arrays class


【解决方案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 可能不是最好的设计,但它至少向您展示了如何解决眼前的问题。您也可以考虑在更基本的位置声明数组。并传递它
猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 2019-06-22
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2017-09-25
相关资源
最近更新 更多