当我从另一个类调用数组时,数组不会更新
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 可能不是最好的设计,但它至少向您展示了如何解决眼前的问题。您也可以考虑在更基本的位置声明数组。并传递它以上是关于当我从另一个类调用数组时,数组不会更新的主要内容,如果未能解决你的问题,请参考以下文章
当我从另一个调用接口方法时,Spring Boot(Java)中出现以下错误